我有一个脚本,其中一部分在某些时候能够并行运行 . Python 3.6.6
目标是最大限度地减少执行时间 .
其中一个部分是与Redis的连接,获取两个键的数据,每个键为 pickle.loads
并返回已处理的对象 .
什么是这类任务的最佳解决方案?我已经尝试了 Queue()
,但是 Queue.get_nowait()
锁定了脚本,并且在 {process}.join()
之后,即使任务完成,它也会停止执行 . 使用 pool.map
引发 TypeError: can't pickle _thread.lock objects
.
我所能实现的只是所有部件的并行运行,但仍然无法连接结果
1 回答
cPickle.load()
将释放GIL,以便您可以轻松地在多个线程中使用它 . 但cPickle.loads()
不会,所以不要使用它 .基本上,将Redis中的数据放入
StringIO
然后从那里cPickle.load()
. 使用concurrent.futures.ThreadPoolExecutor
在多个线程中执行此操作 .