在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Python/ time模塊的sleep函數(shù)不是使進(jìn)程掛起嗎,進(jìn)程掛起后不是釋放cpu嗎,為什么

time模塊的sleep函數(shù)不是使進(jìn)程掛起嗎,進(jìn)程掛起后不是釋放cpu嗎,為什么task0-task3掛起時(shí)task4不會(huì)執(zhí)行

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.')

輸出結(jié)果:
Parent process 669.
Waiting for all subprocesses done...
Run task 0 (671)...
Run task 1 (672)...
Run task 2 (673)...
Run task 3 (674)...
Task 2 runs 0.14 seconds.
Run task 4 (673)...
Task 1 runs 0.27 seconds.
Task 3 runs 0.86 seconds.
Task 0 runs 1.41 seconds.
Task 4 runs 1.91 seconds.
All subprocesses done.

回答
編輯回答
若相惜

因?yàn)槟愕倪M(jìn)程池的大小是4 p = Pool(4),有四個(gè)子進(jìn)程,分別跑task 0~task 3其中Task 2 runs 0.14 seconds.結(jié)束了,進(jìn)程被釋放,所以有一個(gè)空閑進(jìn)程,task4就執(zhí)行了Run task 4 (673)...

因?yàn)槟阌玫腶pply_async
參考https://docs.python.org/3/lib...
It blocks until the result is ready.文檔寫的他會(huì)阻塞直到返回?cái)?shù)據(jù),所以sleep不會(huì)掛起進(jìn)程,會(huì)阻塞進(jìn)程。

你說的sleep掛起進(jìn)程的意思我猜是task0在執(zhí)行sleep的時(shí)候task1也在正常執(zhí)行(并行)吧,但是在task0進(jìn)程內(nèi)sleep應(yīng)該會(huì)執(zhí)行完才釋放進(jìn)程

如果想讓進(jìn)程掛起,可以考慮用psutil.Process.suspend()
參考https://www.zhihu.com/questio...

2018年1月2日 19:20