在腳本的主線程中,我設(shè)置了一個名為的變量queue并用 URL 填充它。然后我創(chuàng)建了 8 個進(jìn)程multiprocessing.Process,然后這些進(jìn)程使用該threading庫產(chǎn)生了 10 個線程。在線程工作者(由上述另一個進(jìn)程產(chǎn)生)中,我有g(shù)lobal queue.然后會queue.get()按預(yù)期行動嗎?我試過了,在某些測試中似乎沒問題,而在其他測試中則不然。問題是,可以從另一個進(jìn)程和線程訪問全局變量嗎?
1 回答

藍(lán)山帝景
TA貢獻(xiàn)1843條經(jīng)驗 獲得超7個贊
很難理解你到底在問什么。但是這里有兩個主要問題:
可以從另一個進(jìn)程訪問全局變量嗎?
不,不是沒有某種形式的進(jìn)程間通信,即使這樣,您也會將該變量的副本傳遞給另一個進(jìn)程。每個進(jìn)程都有自己的全局狀態(tài)。
可以從另一個線程訪問全局變量嗎?
是的,同一個進(jìn)程中的線程可以訪問全局變量,但是必須保證多線程訪問的任何內(nèi)存的安全。這意味著,線程不應(yīng)與其他線程同時訪問可寫內(nèi)存,否則您可能會面臨一個線程寫入內(nèi)存而另一個線程嘗試讀取它的風(fēng)險。
回答上面的問題
如果我正確理解設(shè)置,您的每個子進(jìn)程都有自己的全局變量queue
。每一個都queues
應(yīng)該只能由在該進(jìn)程中產(chǎn)生的線程訪問。
添加回答
舉報
0/150
提交
取消