1

我有一个脚本,其中的一部分有时可以并行运行。蟒蛇 3.6.6

目标是最大程度地减少执行时间。

其中之一是与 Redis 的连接,获取两个键的数据,pickle.loads每个键并返回已处理的对象。

此类任务的最佳解决方案是什么?我已经尝试过Queue()了,但是Queue.get_nowait()锁定了脚本,并且{process}.join()即使任务完成,它也会停止执行。使用pool.map加注TypeError: can't pickle _thread.lock objects

我所能实现的只是所有部分的并行运行,但仍然无法连接结果

4

1 回答 1

0

cPickle.load()将释放 GIL,以便您可以轻松地在多个线程中使用它。但cPickle.loads()不会,所以不要使用它。

基本上,将您的数据从 Redis 放入StringIO然后cPickle.load()从那里。在多个线程中使用concurrent.futures.ThreadPoolExecutor.

于 2018-12-09T01:34:11.673 回答