【发布时间】:2019-09-06 08:59:47
【问题描述】:
我使用pymongo 从mongodb 一次性提取.8 百万条记录(这是一次性过程)并对其执行一些操作。
我的代码如下所示。
proc = []
for rec in cursor: # cursor has .8 million rows
print cnt
cnt = cnt + 1
url = rec['urlk']
mkptid = rec['mkptid']
cii = rec['cii']
#self.process_single_layer(url, mkptid, cii)
proc = Process(target=self.process_single_layer, args=(url, mkptid, cii))
procs.append(proc)
proc.start()
# complete the processes
for proc in procs:
proc.join()
process_single_layer 是一个基本上是从云端下载urls.并存储在本地的功能。
现在的问题是下载过程很慢,因为它必须点击一个 url。由于处理 1k 行的记录很大,因此需要 6 分钟。
为了减少我想实现Multiprocessing 的时间。但是很难看出上面的代码有什么不同。
请建议我如何在这种情况下提高性能。
【问题讨论】:
-
我当然希望这不是你的程序的实际缩进,否则你在启动它后加入每个进程,有效地串联而不是并行运行它们。
-
第二个不好的部分是您正在为每一行创建一个
Process。 -
代码完全没有意义,也许你的识别是错误的?无论如何,我建议您在数据库中进行一些过滤,这样您就不会带来所有记录数据,而是您想要的。
-
实际上我的多处理实现是不正确的。因为它不会增加任何价值,直到我们让它并行。但在这种情况下,我无法思考如何实现并行性
-
首先,与其他建议一样,您需要在所有进程启动后加入,否则您的程序只是系列运行。其次,您是否要同时运行 .8m 进程。在具有修复连接条件的原始代码中,您的程序将生成 .8m 进程...
标签: python multiprocessing pymongo