我有一个需要几个小时才能处理的串行Python应用程序,如何减少运行所需的时间?

Nic*_*ick 4 python

有人可以发一些多线程python的例子吗?我在互联网上搜索,但找不到一个简单,易于复制的教程.简单的例子很好.

我已经编写了一个程序,需要花费几个小时来连续运行 - 我希望我可以在多线程之后将它的运行时间缩短到几分钟.

Ale*_*lli 6

我看到你有很多例子,都是从@Noctis到目前为止,但我不确定他们会如何帮助你.更直接地解决您的问题:在今天的CPython中,多线程可以加速您的应用程序的唯一方法是,如果您的减速很大程度上归因于"阻止I/O"操作,例如由于与(例如)DB的交互服务器,邮件服务器,网站等.(加速I/O的一个强大的替代方法是异步,AKA事件驱动,编程,最丰富的Python框架被扭曲 - 但如果你从未完成事件驱动的编码,它可能更难学习).

即使您的计算机中有许多内核,一个多线程Python进程一次只能使用其中一个,除非它正在执行特殊编码的扩展(通常在C,C++,Cython等中)" GIL"(全球翻译锁)在可行时.

如果你确实有很多核心multiprocessing(一个模块的界面设计看起来很像threading),确实可以加速你的程序.还有许多其他软件包支持"对称多处理器"分布式编程,请参见此处的列表,但是,所有这些软件包都是multiprocessing标准库的一部分(非常方便).如果您有多台计算机之间有快速LAN,您还应该考虑更通用的分布式处理方法,这可以让您使用所有可用的计算机执行相同的任务(其中一些软件包也列在以前的URL中我在"集群计算"标题下给出了.

对于任何数量的可用内核或计算机,您可以获得的加速最终取决于您的问题的性质 - 如果问题本身适合它,那么您使用的算法和数据结构也是如此. ..并非所有人都能加速(它在"令人难以置信的并行"问题之间变化,例如光线跟踪,一直线性加速)到"本质上串行"的问题,其中100台机器不会比一台机器快一些) .因此,如果不了解问题的性质,很难再建议你; 小心解释一下?