python多進(jìn)程共享變量
我們在使用Python開發(fā)應(yīng)用時,為了提高性能,往往會考慮使用并發(fā)。需要注意的是,python的多線程不是并發(fā)的,所以我們應(yīng)該選擇多進(jìn)程multiprocessing。創(chuàng)建子進(jìn)程的方法:
from multiprocessing import Process
def func_entry():
print("I am sub process")
sub_process = Process(target=func_entry)
sub_process.start()
如果需要將一個值傳給子線程,可以將該值作為參數(shù):
from multiprocessing import Process
def func_entry(flag):
print("I am sub process, flag ", flag)
flag = 1
sub_process = Process(target=func_entry, args=(flag))
sub_process.start()
注意:這里flag必須定義在創(chuàng)建子進(jìn)程之前,并且傳入的flag是當(dāng)前的值,父進(jìn)程中在Process調(diào)用后再修改flag,func_entry函數(shù)是感知不到的。
那么如何讓flag可以在父子進(jìn)程之間都感知到變化呢?可以使用multiprocessing的共享變量
import time
from multiprocessing import Process, Manager
def func_entry(flag):
while flag.value < 100:
print("I am sub process, flag ", flag.value)
time.sleep(0.0001)
#這里創(chuàng)建了一個int類型('i'表示類型為整型)的共享變量,初值為1
flag =?Manager().Value('i', 1)
sub_process = Process(target=func_entry, args=(flag))
sub_process.start()
while flag.value < 150:
print("I am father process, flag ", flag.value)
time.sleep(0.0001)
flag.value += 1
這樣無論在子進(jìn)程還是父進(jìn)程中修改flag的值,在另外一個進(jìn)程中都能感知到
昇騰
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。