首页 文章

并行python处理数据

提问于
浏览
0

我有一个脚本,其中一部分在某些时候能够并行运行 . Python 3.6.6

目标是最大限度地减少执行时间 .

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

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

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

1 回答

  • 0

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

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

相关问题