该应用程序已用Python 2.7编写,并在Ubuntu 14.04上运行。
它运行50个线程,一个线程占用所有CPU(100%使用率显示在htop中),其他线程从未有机会继续执行。看起来调度程序无法更改为其他线程。这是正常的吗?
我应该尝试使用进程而不是线程吗?我在想,因为使用多处理我可以使用更多的CPU。
答案 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