关于这个主题有几个问题,但我找不到我的问题的答案。即使python文档也不具有描述性。
我的问题很简单:我想将一个巨大的列表拆分成碎片并并行处理每个碎片。
所以我的问题是解释器在启动程序的下游行之前是否等待所有线程完成(在我的情况下 - 合并已处理的列表)或者我必须将下游进程定义为单独的线程并且使用join
。
虽然,我阅读了有关该主题的帖子(Thread vs. Threading),但我仍然无法理解thread
和threading
之间的区别。
请指导我就该主题发表一篇好文章。这些文档的信息量不大。
PS(@zzk) 所以,即使我使用多处理,在所有进程结束后如何执行公共代码?对于例如5个进程产生5个列表。现在我必须合并这些列表,排序并写入文件。
[代码不准确,仅用于解释情况]
def fun(x,y):
y=someprocessing(x) #type(y)=List
if __name__ == '__main__':
for i in listofprocesses:
p = Process(target=fun, args=(i,y))
p.start()
# DOWNSTREAM CODE#
yy=y1+y2+y3+y4+y5;
yy.sort()
for j in yy:
outfile.write(j)
我想要合并来自不同进程的y
合并。
这里有两个疑问:
由于变量名相同,我是否必须将输出列表(y
)作为参数传递
假设是这样,并且所有已处理的列表都保存为y1,y2,y3,y4
& y5
,将执行下游代码。如何确保所有流程都已结束?
答案 0 :(得分:1)
由于GIL,线程或线程无法帮助您。
在CPython中,全局解释器锁或GIL是一个互斥锁,它可以防止多个本机线程一次执行Python字节码。这种锁是必要的,主要是因为CPython的内存管理不是线程安全的。
您可能需要multiprocessing