我正在尝试使用模块Threading在Python 2.7中实现ThreadPool + Scheduler。我的池包含预先分配的线程,我的调度程序处理哪个线程应该执行任务。我有一些线程执行系统进程,并等待它的结果。这些系统调用可能需要很长时间,我希望能够在任务执行时重用该线程。
示例:
任务1的代码与此类似
build_process = subprocess.Popen(build_command, shell=False)
build_process.wait()
无论如何在等待时从Task1获取线程,并执行任务9?然后,当任务9完成后,返回到任务1(等待进程完成?)Python是否已经实现了这样的功能?
答案 0 :(得分:1)
不,这在基础Python中是不可能的。
虽然比只有第十个线程更多的工作,但是有一些事情要做,让主要线程填充队列中的东西(到目前为止这是正常的),然后才有可能。让每个线程都足够聪明,知道它何时只是等待(例如,一个子进程完成),然后再承担另一个任务。请注意,我不推荐此方法。只需在线程池中创建另一个线程。
如果您有办法知道哪些任务快速且哪些任务很短,那么您可以创建两个线程池:一个用于长任务,一个用于快速任务,并将任务分配给适当的池#s队列中。