Discuss / Python / 使用了close后为什么Task 4还能被创建,不是说close后就不能创建Process对象了吗?

使用了close后为什么Task 4还能被创建,不是说close后就不能创建Process对象了吗?

Topic source

当下31259

#1 Created at ... [Delete] [Delete and Lock User]
from multiprocessing import Pool
import os, time, random

def long_time_task(name):
    print('Run task %s (%s)...' % (name, os.getpid()))
    start = time.time()
    time.sleep(random.random() * 3)
    end = time.time()
    print('Task %s runs %0.2f seconds.' % (name, (end - start)))

if __name__=='__main__':
    print('Parent process %s.' % os.getpid())
    p = Pool(4)
    for i in range(5):
        p.apply_async(long_time_task, args=(i,))
    print('Waiting for all subprocesses done...')
    p.close()
    p.join()
    print('All subprocesses done.')





Parent process 7904.
Waiting for all subprocesses done...
None
Run task 0 (9196)...
Run task 1 (8076)...
Run task 2 (11612)...
Run task 3 (6164)...
Task 1 runs 1.84 seconds.
Run task 4 (8076)...
Task 0 runs 2.12 seconds.
Task 4 runs 0.35 seconds.
Task 3 runs 2.57 seconds.
Task 2 runs 2.93 seconds.
All subprocesses done.

进程是在for循环创建的,只是一次只能运行4个,要等别的进程运行完毕,才能运行4。


  • 1

Reply