python多處理映射中的PID是否保證相對于iterable具有遞增順序?

我有一個(gè)列表,我multi-process分塊,假設(shè)它是:

l = range(100)

讓我們假設(shè)我有10個(gè)CPU(如multiprocessing.cpu_count())。列表l分為10個(gè)區(qū)塊,然后每個(gè)進(jìn)程通過foo函數(shù)負(fù)責(zé)每個(gè)區(qū)塊:

#pseudocode
def foo(chunk):
   pid = multiprocessing.current_process().pid
   for elem in chunk:
      pr_elem = process(elem)
      write pr_elem  in ('out' + str(pid)) file
from more_itertools import divide

p = multiprocessing.Pool(multiprocessing.cpu_count())
p.map(foo, divide(multiprocessing.cpu_count(), l))

分配的PID的順序是否總是相對于iterable的遞增順序?我可以依賴這個(gè)順序并組合來自out[pid]文件的結(jié)果,并且順序?qū)⑵ヅ淞斜碇械膲K(以及元素)嗎?

? 最佳回答:

絕對不是。我有8個(gè)邏輯核,4個(gè)物理核。在下面的代碼中,我創(chuàng)建了一個(gè)大小為4的池,并調(diào)用map函數(shù),將chunksize指定為1,以便輔助函數(shù)一次只捕獲一個(gè)提交的任務(wù)。我還將立即插入一個(gè)sleep調(diào)用作為輔助函數(shù)中的第一條指令,以確保給定進(jìn)程不會(huì)處理所有提交的任務(wù)。通過這種方式,我希望池中的4個(gè)進(jìn)程中的每個(gè)進(jìn)程都處理一個(gè)提交的任務(wù),并且print語句將按照提交任務(wù)的順序出現(xiàn)。

import multiprocessing
import time

def worker(x):
    time.sleep(1 + x)
    print(x, multiprocessing.current_process().pid)

def main():
    pool = multiprocessing.Pool(4)
    pool.map(worker, range(4), chunksize=1)

if __name__ == '__main__':
    main()

Prints:

0 26632
1 15800
2 25916
3 30356
主站蜘蛛池模板: 亚洲一区中文字幕久久| 视频一区二区精品的福利| 欧美激情一区二区三区成人| 国产中文字幕一区| 亚欧免费视频一区二区三区| 欧美亚洲精品一区二区| 精品乱人伦一区二区三区| 日本一区二区在线不卡| 呦系列视频一区二区三区| 九九久久99综合一区二区| 亚洲免费一区二区| 大香伊人久久精品一区二区| 精品福利一区二区三| 无码AV动漫精品一区二区免费| 国产一区二区精品| 一区二区在线播放视频| 国产SUV精品一区二区88L| 国产日韩视频一区| 精品一区二区久久久久久久网精| 在线中文字幕一区| 乱码精品一区二区三区| 亚洲一区二区女搞男| 久久成人国产精品一区二区| 国产福利电影一区二区三区,亚洲国模精品一区 | 麻豆一区二区99久久久久| 日韩精品在线一区二区| 少妇无码一区二区三区| 一区二区三区亚洲| 精品视频一区二区三区四区 | 国产人妖视频一区二区破除| 精品国产日韩亚洲一区91| 国产高清一区二区三区视频| 日韩A无码AV一区二区三区| 国产综合精品一区二区| 日本福利一区二区| 国产精品成人国产乱一区| 日韩十八禁一区二区久久| 精品一区二区三区四区在线| 免费一区二区三区| 伊人无码精品久久一区二区| 国产伦精品一区二区三区精品|