我对multiprocessing
库还比较陌生,在使用其与map()
一起操作的Pool
模块时,有一个问题。假设我有4个工作线程和6项任务需要完成。我的做法是(使用multiprocessing.dummy
,因为我想要生成线程而不是进程)。
from multiprocessing.dummy import Pool as ThreadPool
def print_it(num):
print num
def multi_threaded():
tasks = [1, 2, 3, 4, 5, 6]
pool = ThreadPool(4)
r = pool.map(print_it, tasks)
pool.close()
pool.join()
multi_threaded()
我希望了解Pool.map() 如何处理任务?有以下三个选项:
- 它首先生成4个线程,完成前4个任务,并让线程死亡。然后为剩余的任务生成2个新线程?
- 它生成4个线程,将4个任务分配给它们,一旦某个线程完成其任务,就将新任务分配给同一线程。
- 其他方式。
print_it
函数也sleep
来进行测试,看看会发生什么。在 Python 3.6 中进行这个测试,似乎新任务会在有空闲线程处理时立即启动。 - quamranaThreadPool
类是普通的multiprocessing.pool.Pool
的子类,它覆盖了一些东西(如果您想要查看,可以在文件底部看到它的定义)。 - Blckknght