import multiprocessingdef send_request(data): lock.acquire() print(data,' ',os.getpid()) lock.release()def init(l): global lock lock = lif __name__ == '__main__': data_list = ['data1', 'data2', 'data3'] lock = multiprocessing.Lock() pool = multiprocessing.Pool(8, initializer=init, initargs=(lock,),maxtasksperchild=1) pool.map(send_request, range(10000)) pool.close() pool.join()程序的部分輸出如下9995 158249996 158249997 158249998 158249999 15824根據(jù)maxtasksperchild的設(shè)置,應(yīng)該是每個進(jìn)程只執(zhí)行一個任務(wù),為什么輸出顯示一個進(jìn)程執(zhí)行了多個任務(wù)。但是,當(dāng)我將語句從 更改為 時pool.map(send_request, range(10000)),pool.map(send_request, range(9))輸出顯示 maxtasksperchild 設(shè)置正常。0 117761 54242 109843 158484 110005 167286 44807 120168 12936Pythonpython-多處理
2 回答

瀟湘沐
TA貢獻(xiàn)1816條經(jīng)驗 獲得超6個贊
簡而言之,多處理是一組多個輸入?yún)?shù),出于性能原因task
,這些參數(shù)一起發(fā)送(按大小批量發(fā)送)。chunksize
因此,worker 最多將執(zhí)行maxtaskperchild * chunksize
函數(shù)調(diào)用。
可以在pool.map
調(diào)用中指定塊大?。?/p>
pool.map(send_request, range(1000), chunksize=1)
添加回答
舉報
0/150
提交
取消