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根據maxtasksperchild的設置,應該是每個進程只執行一個任務,為什么輸出顯示一個進程執行了多個任務。但是,當我將語句從 更改為 時pool.map(send_request, range(10000)),pool.map(send_request, range(9))輸出顯示 maxtasksperchild 設置正常。0 117761 54242 109843 158484 110005 167286 44807 120168 12936Pythonpython-多處理
2 回答

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