这种启动PHP Shell的系统对于我的PHP Web应用程序的功能是必要的,因此无法避免使用Python启动PHP Shell。
此脚本仅在Linux服务器上运行。
编辑2: 好吧,最终我没有找到一种处理这个问题的Python方式。现在我只是使用nice命令来运行我的脚本,就像这样:
nice -n 19 python MyScript.py
nice -n 19 python MyScript.py
由于在Python中线程使用全局解释器锁(GIL)实现,因此我认为无法控制线程优先级。即使你可以提高某个线程的CPU处理优先级,Python实现负责传递GIL时也不会意识到这一点。如果您能够在池中的单个线程中增加niceness(比如它正在执行更重要的任务),则需要使用自己的锁实现,以使较高优先级的线程更频繁地访问GIL。
通过谷歌搜索,我发现这篇文章与您所问的问题类似
说明为什么不起作用: http://www.velocityreviews.com/forums/t329441-threading-priority.html
说明我所建议的解决方法: http://bytes.com/topic/python/answers/645966-setting-thread-priorities
这个方法并不起作用,但是我试过了:
即使大量使用os.sched_yield(),子线程也永远不会在setpriority()之后真正运行。
通过阅读man手册,似乎线程没有改变(甚至自己的)调度优先级的能力;你必须对“capabilities”进行某些操作,以给线程赋予“CAP_SYS_NICE”的能力。即使以root权限运行进程也没有帮助;子线程仍然无法运行。
我知道已经过去了很久,但是最近我遇到了这个问题,我认为增加另一种选择可能会有用。
看看threading2,它是默认线程模块的一个即插即用替代和扩展,支持优先级和亲和力。
我在想, 另一个相关问题的这个答案 是否在这种情况下有用呢?(链接)
由于您已经在使用 Subprocess.POpen 来启动 PHP 脚本,因此我认为您可以使用 "preexec_fn" 和预定义函数或 lambda 函数 (如上面链接的答案所示) 来设置每个启动的 PHP 线程的好级别。