0

关于这个主题有几个问题,但我找不到我的问题的答案。甚至 python 文档也没有那么描述性。

我的问题很简单:我想将一个巨大的列表分成几部分并并行处理每一部分。

所以我的问题是解释器是等到所有线程都完成后再启动程序的下游行(在我的情况下 - 合并处理列表)还是我必须将下游进程定义为单独的线程并使用join.

虽然,我阅读了有关该主题(线程与线程)的帖子,但我仍然不太了解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不同流程产生的产品组合起来进行合并。这里有两个疑问:

  1. 由于变量名相同,我是否必须将输出列表 ( y) 作为参数传递

  2. 假设是这样,并且所有处理的列表都保存为y1,y2,y3,y4& y5,将执行下游代码。如何确保所有流程都已结束?

4

1 回答 1

1

由于GIL,线程或线程不会帮助您。

在 CPython 中,全局解释器锁或 GIL 是一个互斥锁,可防止多个本机线程同时执行 Python 字节码。这个锁是必要的,主要是因为 CPython 的内存管理不是线程安全的。

您可能需要多处理

于 2013-03-11T20:15:33.037 回答