当一个线程占用100%的CPU时,多线程应用程序挂起

时间:2014-12-12 13:08:18

标签: python multithreading

该应用程序已用Python 2.7编写,并在Ubuntu 14.04上运行。

它运行50个线程,一个线程占用所有CPU(100%使用率显示在htop中),其他线程从未有机会继续执行。看起来调度程序无法更改为其他线程。这是正常的吗?

我应该尝试使用进程而不是线程吗?我在想,因为使用多处理我可以使用更多的CPU。

2 个答案:

答案 0 :(得分:1)

如果您知道哪个线程正在占用cpu,请尝试插入

time.sleep(0)

在它的主循环中的某个地方。这将导致它屈服于另一个可用的线程。

该线程做了什么工作?它在做任何IO吗? Python线程最适合IO绑定任务。对于CPU绑定的任务,可能永远不允许另一个线程运行。

答案 1 :(得分:1)

https://wiki.python.org/moin/GlobalInterpreterLock

是的,multiprocessing可能是您案例中实施事情的推荐方式。或者您可以尝试重写挂起的线程,以便它不会占用太多CPU(取决于为什么它挂起,可能它有点重要)。或至少运行time.sleep(0),因为@ user5402建议。

您也可能会发现有用的asyncio