Python线程调度

时间:2017-03-06 15:05:50

标签: python python-2.7 python-3.x

我正在尝试使用模块Threading在Python 2.7中实现ThreadPool + Scheduler。我的池包含预先分配的线程,我的调度程序处理哪个线程应该执行任务。我有一些线程执行系统进程,并等待它的结果。这些系统调用可能需要很长时间,我希望能够在任务执行时重用该线程。

示例:

  1. ThreadPool有8个线程
  2. 8个任务齐聚一堂
  3. 第9个任务在一小段延迟后进入
  4. 任务1需要1024年(也许它可以使用一些优化)。
  5. 任务2-8需要1年。
  6. 任务9进来,只需1秒钟。
  7. 由于正在使用所有线程,因此无法执行任务9。
  8. 任务1的代码与此类似

    build_process = subprocess.Popen(build_command, shell=False)
    build_process.wait()
    

    无论如何在等待时从Task1获取线程,并执行任务9?然后,当任务9完成后,返回到任务1(等待进程完成?)Python是否已经实现了这样的功能?

1 个答案:

答案 0 :(得分:1)

不,这在基础Python中是不可能的。

虽然比只有第十个线程更多的工作,但是有一些事情要做,让主要线程填充队列中的东西(到目前为止这是正常的),然后才有可能。让每个线程都足够聪明,知道它何时只是等待(例如,一个子进程完成),然后再承担另一个任务。请注意,我推荐此方法。只需在线程池中创建另一个线程。

如果您有办法知道哪些任务快速且哪些任务很短,那么您可以创建两个线程池:一个用于长任务,一个用于快速任务,并将任务分配给适当的池#s队列中。