亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么輸出顯示一個進程執行了多個任務

為什么輸出顯示一個進程執行了多個任務

慕妹3146593 2022-05-24 16:21:34
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貢獻1851條經驗 獲得超5個贊

這對我來說看起來是預期的行為。根據參考文檔here,函數Pool.map()

將可迭代對象分割成多個塊,將它們作為單獨的任務提交給進程池。這些塊的(近似)大小可以通過將 chunksize 設置為正整數來指定。

這顯然允許選項send_request為同一進程使用不同的參數多次調用。通過chunksize=1應該可以解決這個問題。


查看完整回答
反對 回復 2022-05-24
?
瀟湘沐

TA貢獻1816條經驗 獲得超6個贊

你會在這里找到一個等效的問題

簡而言之,多處理是一組多個輸入參數,出于性能原因task,這些參數一起發送(按大小批量發送)。chunksize因此,worker 最多將執行maxtaskperchild * chunksize函數調用。

可以在pool.map調用中指定塊大?。?/p>

pool.map(send_request, range(1000), chunksize=1)


查看完整回答
反對 回復 2022-05-24
  • 2 回答
  • 0 關注
  • 131 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號