2016-04-21 21 views
1
GLOBAL_VAR = 1 
class Worker: 
    class_var = 2 

工人的實例由多個進程創建。他們是否擁有自己的上述變量副本?如果沒有,我可以使用它們安全地鎖定對多個類實例訪問的資源的訪問權限(當然,以線程安全的方式創建和訪問它們)?我想爲一個班級用戶透明地做到這一點。什麼是正確的方法來做到這一點?python中的進程共享什麼變量?

回答

1

你說的是多線程還是多處理?這些在Python中非常不同。

線程可以像在Python中一樣使用變量,不受限制。另一方面,進程不能訪問另一個進程的變量(不包括共享變量的一些例外)。進程將在創建時複製局部變量的當前狀態,但它只是一個副本。

+0

多處理。有沒有一種方式來共享數據而不會注意到父進程? – VladimirLenin

+0

你能否清楚暴露你想要達到的目標?在進程之間進行通信有多種方式,但實際上取決於應用程序 – CoMartel

+0

有N個工作程序實例在其自己的進程中運行。父進程使用不會將任何鎖/引用傳遞給子工的接口。我不想更改界面,因爲還有其他童工種類不同於Worker,共享相同的界面,不需要這些鎖定/數據。每個工作人員最終訪問資源(「姓名」)。如果一名工作人員在「名稱」上工作,其他嘗試這樣做的人可以跳過此操作。因此,維護工作人員共享的工作名稱列表就足夠了(我想,有一個用於列表更新的互斥體)。 – VladimirLenin