:あなたは、マップは順番に実行されます気づくが、map_asyncないよ:quikst3rが言うようにpythonマルチプロセッシングモジュールのmap(block)とmap_async(non block)の違いは何ですか? stackoverflowの以前の議論では
python-multiprocessing-map-vs-map-async
。
map(block)vs map_async(non block)の例です。
map-sync.pyコード。
import multiprocessing
import os
import time
from datetime import datetime
def subprocess(number):
print('this is the %d th subprocess' % number)
time.sleep(3)
def mainprocess():
print('this is the main process ,process number is : %d' % os.getpid())
pool = multiprocessing.Pool(3)
list=range(9)
pool.map(subprocess,list)
pool.close()
pool.join()
if __name__ == '__main__':
mainprocess()
時々map_syncは、ここでは、マップ機能のための順序で実行することはできません。
map-async.pyコード。
import multiprocessing
import os
import time
from datetime import datetime
def subprocess(number):
print('this is the %d th subprocess' % number)
time.sleep(3)
def mainprocess():
print('this is the main process ,process number is : %d' % os.getpid())
pool = multiprocessing.Pool(3)
list=range(9)
pool.map_async(subprocess,list)
pool.close()
pool.join()
if __name__ == '__main__':
mainprocess()
時々map_asyncはここmap_async機能のための順序で実行することができます。
マルチプロセスの場合、すべてのプロセスはプリエンプティブマルチタスキングであり、mapおよびmap_asyncの順序はありません。
マップとmap_asyncを実行するための絶対実行はなく、実行時間はほぼ同じです(9 * 3 = 9)。
マルチプロセッシングモジュールの適用機能のブロックを見てみましょう。
apply.pyコード。
import multiprocessing
import os
import time
from datetime import datetime
def subprocess(number):
print('this is the %d th subprocess' % number)
time.sleep(3)
def mainprocess():
print('this is the main process ,process number is : %d' % os.getpid())
pool = multiprocessing.Pool(3)
for i in range(9):
pool.apply(subprocess,args=(i,))
pool.close()
pool.join()
if __name__ == '__main__':
mainprocess()
27 = 3 * 9(すべてのプロセスがブロックされた)
私はモジュールマルチプロセッシングにマップとmap_async間のブロックと非ブロック帰属を証明するためにどのように困惑していますか?
マップ(ブロック)とmap_async(非ブロック)マルチプロセッシングモジュールの違いは何ですか?