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

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