python中列表的并行写入

2024-04-23 09:13:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我用python将多个并行进程写入一个列表中。我的代码是:

global_list = []
class MyThread(threading.Thread):
    ...
    def run(self):
    results = self.calculate_results()

    global_list.extend(results)


def total_results():
    for param in params:
         t = MyThread(param)
         t.start()
    while threading.active_count() > 1:
        pass
    return total_results

我不喜欢这种说法:

  1. 整体全局变量->;“total\u results”函数的局部变量是什么?在
  2. 我在返回列表时检查的方式似乎有些笨拙,标准的方法是什么?在

Tags: run代码self列表param进程defglobal
2条回答

1-使用在所有Worker实例之间共享的类变量来附加结果

class Worker(threading.Thread):
    results = []
    ...

    def run(self):
        results = self.calculate_results()
        Worker.results.extend(results) # extending a list is thread safe

2-使用join()等待所有线程完成,并让它们有一些计算时间

^{pr2}$

你的计算是CPU密集型的吗?如果是这样的话,您应该看看Python中包含的多处理模块,它提供了一个非常易于使用的Pool类,您可以将计算任务输入其中,然后获得所有结果。如果您需要大量的CPU时间,那么无论如何这会更快,因为Python并不能很好地处理线程:一个进程中一次只能运行一个解释器线程。多处理回避了(并提供了池抽象,使您的工作更容易)。哦,如果你真的想坚持线程,多处理也有一个线程池。在

相关问题 更多 >