我正在使用Python2.7,我有一些代码如下所示:
task1()
task2()
task3()
dependent1()
task4()
task5()
task6()
dependent2()
dependent3()
这里唯一的依赖项如下:dependent1需要等待tasks1-3,dependent2需要等待tasks 4-6,dependent3需要等待dependents1-2。。。可以这样做:首先并行运行全部6个任务,然后并行运行前两个从属任务。。那么最后的依赖
我更喜欢尽可能多的任务并行运行,我搜索了一些模块,但我希望避免使用外部库,不确定队列线程技术如何解决我的问题(也许有人可以推荐一个好的资源?)
看看Gevent。
示例用法:
希望,这就是你一直在寻找的。
内置的threading.Thread类提供了您所需要的一切:start来启动新线程,以及join来等待线程的结束。
或者可以使用Queue.join来等待线程结束。
如果您愿意尝试使用外部库,则可以使用Ray优雅地表示任务及其依赖项。这在一台机器上工作得很好,这里的优点是并行性和依赖性可以用Ray比python多处理更容易表达,而且它没有GIL(全局解释器锁)问题,而GIL(全局解释器锁)通常会阻止多线程有效工作。此外,如果将来需要的话,可以很容易地在集群上扩展工作负载。
解决方案如下:
您还可以通过使用任务内部的参数并返回结果(例如说“return value”而不是上面的“pass”)在任务之间传递实际的python对象。
使用“pip install ray”,上述代码可以在一台机器上开箱即用,而且在集群上并行应用程序也很容易,无论是在云中还是在您自己的自定义集群中,请参见https://ray.readthedocs.io/en/latest/autoscaling.html和https://ray.readthedocs.io/en/latest/using-ray-on-a-cluster.html)。如果以后你的工作量增加的话,这可能会派上用场。
免责声明:我是雷的开发者之一。
相关问题 更多 >
编程相关推荐