我看到这个page建议使用延迟模块来异步执行一系列任务。
我想将它用于我的项目:
但事实上,我不太明白如何使用它。
我希望能有一些关于延迟python的解释,以及你是否认为这是实现我的目标的合适方式(考虑全球解释器锁)。
提前致谢!
答案 0 :(得分:1)
不,使用异步编程(协作例程,也就是协同程序),对您的用例没有帮助。 Async非常适合 I / O密集型工作负载,或其他任何需要等待较慢的外部事件才能触发的事件。
协同程序的工作原理是因为只要等待某些东西(通常用于某些I / O),它们就会放弃对其他协同程序的控制( yield )。如果他们经常这样做,事件循环可以在协同程序的加载之间交替,通常远远超过线程可以实现的,使用更简单的编程模型(不需要一直锁定数据结构)。 / p>
您的用例不是在等待I / O;你有计算量很大的工作量。这样的工作负载没有明显的产出空间,并且因为它们不需要等待外部事件,所以无论如何都没有理由这样做。对于此类工作负载,请使用multiprocessing model在不同的CPU内核上并行工作。
异步编程也没有击败GIL,但确实给事件循环提供了将等待I / O 部分移动到可以解锁GIL并处理所有I / C的C代码的机会。 O并行处理,而其他Python代码(在不同的协程中)可以执行。
有关异步编程的详细介绍,请参阅this talk by my colleague Łukasz Langa at PyCON 2016。