寻找以下骨架代码的意见 . 我将使用一个大的输入列表进行一些Web抓取,并希望并行化该函数,同时将输出写入块中的json文件,以防进程失败我不会丢失工作 . 代码生成我想要的输出,函数f将是刮刀,print(结果)将输出到json文件 . 想知道是否有更有效的方法:
import multiprocessing as mp
import os
def f(x):
print('Doing: ' + str(x) + ' with process id:'+ str(os.getpid()) + '\n')
return(x*x)
def main():
id_list = range(1000)
chunksize = 10
lock = mp.Lock()
for i in range(0, len(id_list), chunksize):
chunk = id_list[i : i + chunksize]
p = mp.Pool(12)
results = p.map(f, chunk)
for j in range(len(results)):
lock.acquire()
try:
print('The results is: ' + str(results[j]) + '\n')
finally:
lock.release()
p.close()
if __name__ == "__main__":
main()
print("Done")
1 回答
每个进程都可以将自己的输出写入单独的文件中,您可以稍后处理它们的组合 .
这样你根本不需要处理锁或可能编写并发问题或其他任何问题 .