我在多重處理方面遇到了大問題。在這種情況下我有一個
1.主行程中的主類別
2.另一個行程中的foo類別
我必須使用主程序來更改 process2 內部的一些變數。 我怎樣才能做到這一點/? ? ?
class Main: def __init__(self): self.Foo_Instance = Foo() multiprocessing.Process(target=self.Foo_Instance.do_something).start() def Change_Foo(self): Foo_Instance.ImportantVar = True class Foo: def __init__(self): self.ImportantVar = False def do_something(self): pass Main_Instance = Main() Main_Instance.Change_Foo()
每個進程通常都有自己的內存,任何其他進程都無法存取該記憶體。如果您希望一個進程能夠修改另一個進程正在使用的變量,那麼最簡單的解決方案是在共享記憶體中建立該變數。在下面的示範中,我們使用 multiprocessing.value
一个>實例。為了證明main.change_foo
可以修改foo
的importantvar
屬性,我們必須在main.change_foo
修改它之前給foo .do_something
一個印出其初始值的機會。同樣, foo.do_something
需要等待 main.change_foo
更改值才能列印更新的值。為了實現這一點,我們使用兩個 'multiprocessing.event' 實例:
import multiprocessing import ctypes import time class main: def __init__(self): self.foo_instance = foo() multiprocessing.process(target=self.foo_instance.do_something).start() def change_foo(self): # wait for foo.do_something to have printed out its initial value: self.foo_instance.initial_print_event.wait() # modify the attribute (add missing self): self.foo_instance.importantvar.value = true # show that we have modified the attribute: self.foo_instance.changed_event.set() class foo: def __init__(self): self.importantvar = multiprocessing.value(ctypes.c_bool, false, lock=false) self.initial_print_event = multiprocessing.event() self.changed_event = multiprocessing.event() def do_something(self): print('do_something before:', self.importantvar.value) # show that we have completed printing our initial value: self.initial_print_event.set() # now wait for main.change_foo to have changed our variable: self.changed_event.wait() print('do_something after:', self.importantvar.value) # required for windows: if __name__ == '__main__': main_instance = main() main_instance.change_foo()
列印:
do_something before: False do_something after: True
以上是Python 中進程之間不共享實例變數的詳細內容。更多資訊請關注PHP中文網其他相關文章!