如何限制 Python 线程?

2023-12-23

我有一个线程执行大量 CPU 密集型处理,这似乎阻塞了其他线程。我该如何限制它?

这是专门针对 web2py 的,但通用的解决方案就可以了。


事实上,我不久前刚刚开始研究这个问题,你将无法更改线程优先级,但有一些方法可以解决这个问题。

为了给您提供一些有关该问题的背景知识,在 cPython 实现中,CPU 绑定线程可能会由于全局解释器锁或 GIL 的释放和获取方式而导致其他线程挨饿。奇怪的是,这个问题在多核环境中变得更糟。对此问题进行了非常详细的分析和介绍大卫·比兹利 http://www.dabeaz.com/你可以在以下位置找到http://www.dabeaz.com/python/GIL.pdf http://www.dabeaz.com/python/GIL.pdf。他有几篇博客文章更详细地介绍了这些内容。它们很长,但相当迷人。

简而言之,CPU 绑定线程会释放并重新获取 GIL,然后才能唤醒其他线程来获取 GIL。导致 CPU 密集型线程在超过 90% 的时间里持有 GIL。

您可以使用一些模式来解决此问题。例如,您可以在完全不同的进程中运行 CPU 密集型任务。这将使操作系统调度程序能够更好地管理资源共享,并且应该允许您的 web2py 线程继续运行,因为操作系统实际上会优先对待 IO 绑定线程。这多重处理 http://docs.python.org/library/multiprocessing.html为此类情况提供了库。它将需要更多代码才能使其正常工作,但这应该会有所帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何限制 Python 线程? 的相关文章

随机推荐