在并发python进程/执行程序之间共享资源?

时间:2018-03-26 12:58:50

标签: python python-3.x multiprocessing python-multiprocessing python-multithreading

我有一个简单的程序来处理从文件读入的内容。有很多东西,处理速度不是很快,需要庞大的数据结构来查找和计算,所以运行这个需要花费很多时间。这应该是平行的,但我不确定如何在Python中使用Pythong 3.5或更高版本。

我想学习如何最好地实现并行实现。理想情况下,我会有一些工作人员共享庞大的数据结构,然后读取内容并将它们循环分配给队列中的每个工作人员。工作人员将使用(共享)巨大的数据结构进行缓慢的处理,并且每个都以某种方式存储结果。一旦所有工人完成,我将收集每组结果并按顺序组合它们。

在Python中这样的事情是可能的吗?或者在Python中用其他方法做到这一点的最佳方法是什么?我已经尝试但未能理解concurrent.futures模块,足以看到我如何用它来实现解决方案。

令我感到困惑的是,目前尚不清楚将会发生什么事情"引擎盖下#34;。如果为每个东西运行的callable不是纯功能但需要(巨大的)数据首先加载,如何最好地实现这一点?我假设我不能简单地传递对数据的引用?或者我可以吗?它适用于多线程但不适用于多处理吗?但是使用多线程甚至会加速我的问题吗?

1 个答案:

答案 0 :(得分:1)

例如,如果您不关心哪个线程会处理您的数据的一部分,您可以在线程之间共享Queue,并在队列不为空时循环每个线程。< / p>

class Test(Thread):

    def __init__(self, q, i):
        super().__init__()
        self.q = q
        self.id = i

    def run(self):
        while not self.q.empty():
            print(str(self.q.get()) + 'treated by thread ' + str(self.id))