[英]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.