python - 控制python线程的调度优先级?

标签 python multithreading threadpool scheduling nice

我编写了一个脚本,它使用两个线程池(每个线程池有 10 个线程)从 API 中提取数据。线程池实现this code on ActiveState .每个线程池都通过 PubSub 监控一个 Redis 数据库。对于新条目。发布新条目时,python 将数据传递给使用 python 的 Subprocess.POpen 的函数。执行一个 PHP shell 来完成调用 API 的实际工作。

这个启动 PHP shell 的系统对于我的 PHP Web 应用程序的功能是必要的,因此无法避免使用 Python 启动 PHP shell。

此脚本将仅在 Linux 服务器上运行。

如何控制niceness应用程序线程的(调度优先级)?

编辑:

在 Python 中控制单个线程的调度优先级似乎是不可能的。是否有 python 解决方案,或者至少我可以与脚本一起运行的 UNIX 命令来控制优先级?

编辑 2:

好吧,我最终没有找到处理它的 python 方法。我现在就像这样运行我的脚本:

nice -n 19 python MyScript.py

最佳答案

我相信线程优先级在 python 中是不可控的,因为它们是如何使用全局解释器锁 (GIL) 实现的。话虽如此,即使您可以给一个线程更多的 CPU 处理优先级,传递 GIL 的 python 实现在传递 GIL 时也不会意识到这一点。如果您能够提高池中单个线程的友好度(比如说它正在做一项更重要的工作),您将需要使用您自己的锁实现来让更高优先级的线程更频繁地访问 GIL。

谷歌搜索返回这篇文章,我认为它与您的要求相似

解释为什么它不起作用 http://www.velocityreviews.com/forums/t329441-threading-priority.html

解释我建议的解决方法 http://bytes.com/topic/python/answers/645966-setting-thread-priorities

关于python - 控制python线程的调度优先级?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11421651/

相关文章:

python - 从数组中中断并在 python 中运行另一个函数

c++ - std::async 与 std::launch::async 策略的行为

java - 通过主线程中的单独方法更改条件后,单独线程中的 while 循环继续运行

java - java中的Executor服务-->如何将单线程代码转换为使用executor

c# - 如何使用线程池和 Entity Framework 处理数据库操作?

python - 神经网络关于输入的导数

python - 创建旋转表面

python - 为我的自定义迭代器实现 iteritems 函数?

java - 等待线程不恢复

java - 终止服务时关闭 ScheduledExecutorService