Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
控制python线程的调度优先级?_Python_Multithreading_Threadpool_Scheduling_Nice - Fatal编程技术网

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

控制python线程的调度优先级?,python,multithreading,threadpool,scheduling,nice,Python,Multithreading,Threadpool,Scheduling,Nice,我编写了一个脚本,它使用两个线程池(每个线程包含10个线程)从API中提取数据。线程池实现。每个线程池都通过监视Redis数据库以查找新条目。当发布一个新条目时,python将数据传递给一个函数,该函数使用python执行一个PHP shell来执行调用API的实际工作 这个启动PHP shell的系统对于我的PHP web应用程序的功能是必需的,因此无法避免使用Python启动PHP shell 此脚本将仅在Linux服务器上运行 如何控制应用程序线程的(调度优先级) 编辑: 在Python中

我编写了一个脚本,它使用两个线程池(每个线程包含10个线程)从API中提取数据。线程池实现。每个线程池都通过监视Redis数据库以查找新条目。当发布一个新条目时,python将数据传递给一个函数,该函数使用python执行一个PHP shell来执行调用API的实际工作

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

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

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

编辑:

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

编辑2:

我没有找到python的方法来处理它。我现在正在用nice运行脚本,如下所示:

nice -n 19 python MyScript.py

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

谷歌搜索会返回这篇文章,我相信这篇文章与你所问的内容类似

解释了为什么它不起作用

解释了我建议的解决方法

我想知道在这种情况下是否有用?()


由于您已经在使用启动PHP脚本,我觉得您可以使用“preexec_fn”和预定义函数或lambda函数(如上面链接的答案所示)来设置每个启动的PHP线程的良好级别?

我知道,已经过了很多时间,但我最近遇到了这个问题,我认为添加另一个选项会很有用


看一看,这是默认线程模块的替换和扩展,支持优先级和亲和力。

不起作用,但我尝试了:

  • 获取父pid和优先级
  • 使用concurrent.futures.ThreadPoolExecutor启动线程
  • 使用ctypes从线程(works)中获取(linux)线程id
  • 使用具有os.setpriority的tid(os.PRIO_进程、tid、父级_优先级+1)
  • 从父级调用pool.shutdown()
  • 即使在os.sched_yield()的自由分布下,子线程实际上也不会超过setpriority()

    在阅读手册页时,线程似乎没有能力更改(甚至它们的)调度优先级;您必须对“功能”进行一些处理,以赋予线程“CAP\u SYS\u NICE”功能。使用root权限运行进程也没有帮助;子线程仍然不运行。

    python明确提到不支持设置线程优先级:

    该模块的设计松散地基于Java的线程模型。然而,当Java将锁和条件变量作为每个对象的基本行为时,它们在Python中是独立的对象。Python的线程类支持Java线程类行为的子集目前,没有优先级,没有线程组,无法销毁、停止、挂起、恢复或中断线程。Java线程类的静态方法在实现时映射到模块级函数


    谢谢你的回答!我已经重新表述了现在的问题,即如何为整个应用程序而不是单个应用程序设置计划优先级。那应该能满足我的需要。我已经对您的回复进行了投票,如果没有其他回复,我会选择您作为最佳答案。该回复现在未维护,有一个链接指向:(