【发布时间】:2012-01-04 16:20:13
【问题描述】:
我使用的是 python 2.7,我有一些看起来像这样的代码:
task1()
task2()
task3()
dependent1()
task4()
task5()
task6()
dependent2()
dependent3()
这里唯一的依赖如下:dependent1需要等待task1-3,dependent2需要等待task 4-6,dependent3需要等待dependents1-2……下面就可以了:运行整体6 个任务首先并行,然后是前两个依赖项并行.. 然后是最后一个依赖项
我更喜欢让尽可能多的任务并行运行,我搜索了一些模块,但我希望避免使用外部库,并且不确定 Queue-Thread 技术如何解决我的问题(也许有人可以推荐好资源?)
【问题讨论】:
-
我推荐使用标准库的 Queue.task_done 和 Queue.join 方法来同步线程。在队列文档的页面底部,您将找到一个如何等待其他线程完成其任务的示例:docs.python.org/library/queue.html#Queue.Queue.join
-
如果您的代码变得更复杂,则值得查看外部库,因为已经有一些事情可以处理并行运行的任务,同时确保依赖项按顺序运行。
-
由于 GIL,线程在标准 python 中一次只能运行一个。不过,使用 STM 的 Pypy 未来版本可能会解决这个问题。
标签: python multithreading queue parallel-processing