我有一个简单的程序来处理从文件读入的内容。有很多东西,处理速度不是很快,需要庞大的数据结构来查找和计算,所以运行这个需要花费很多时间。这应该是平行的,但我不确定如何在Python中使用Pythong 3.5或更高版本。
我想学习如何最好地实现并行实现。理想情况下,我会有一些工作人员共享庞大的数据结构,然后读取内容并将它们循环分配给队列中的每个工作人员。工作人员将使用(共享)巨大的数据结构进行缓慢的处理,并且每个都以某种方式存储结果。一旦所有工人完成,我将收集每组结果并按顺序组合它们。
在Python中这样的事情是可能的吗?或者在Python中用其他方法做到这一点的最佳方法是什么?我已经尝试但未能理解concurrent.futures模块,足以看到我如何用它来实现解决方案。
令我感到困惑的是,目前尚不清楚将会发生什么事情"引擎盖下#34;。如果为每个东西运行的callable不是纯功能但需要(巨大的)数据首先加载,如何最好地实现这一点?我假设我不能简单地传递对数据的引用?或者我可以吗?它适用于多线程但不适用于多处理吗?但是使用多线程甚至会加速我的问题吗?
答案 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))