簡體   English   中英

在python中使用多進程時子進程會做什么

[英]What will subprocesses do when using multiprocess in python

我現在正在學習python中的多進程庫,所以我設計了一些實驗來看看整個過程是如何進行的。 我對下面的實驗感到困惑。 第一個問題是為什么每個子進程使用的link_id的值仍然是0。第二個問題是為什么line3-line6進行了很多次(我的例子是9次),並且不等於我擁有的子進程數. Python版本:3.7.4,操作系統:win10

from multiprocessing import Pool

link_id = 0
print('head is printing link, value {}, id {}'.format(link_id,id(link_id)))
node_id = 0
print('head is printing node, value {}, id {}'.format(node_id,id(node_id)))

def job(i):
    print('job {} is printing link, value {}, var id {}'.format(i,link_id,id(link_id)))    

def mainFunc():

    p = Pool()
    for i in range(20): p.apply_async(job, args=(i,))
    p.close()
    p.join()


if __name__ == '__main__':
    link_id = 10
    print('main is printing link, value {}, id {}'.format(link_id,id(link_id)))
    mainFunc()
    print('main is printing link, value {}, id {}'.format(link_id,id(link_id)))

為什么每個子進程使用的link_id值是0

每個子進程都是 python 解釋器的一個實例,每個子進程都將運行/編譯你的腳本並有一個對模塊的單獨引用。 __name__ == '__main__'將是False因為這僅在您直接運行文件時才為True ,因此對於這些子link_id中的每一個, link_id將為0

為什么line3-line6進行多次

答案與第一個相同,這些行將運行number_of_subprocesses + 1次(額外的 1 次是在您運行腳本時)。 如果您更改池中的進程數,您應該會看到行運行的次數發生變化

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM