你肯定可以,沿着線使用的東西:
from multiprocessing import Process
class WebSocketApp(object):
def on_open(self):
# Create another thread to make sure the commands are always been read
print "Creating thread..."
try:
p = Process(target = WebSocketApp.read_commands, args = (self,)) # Add other arguments to this tuple
p.start()
except:
print "Error: Unable to start thread"
然而,必須指出,重要的是,只要對象是在兩個對象發送到其他進程self
和self
不同的線程發散並表示不同的對象。如果您希望溝通,您需要使用multiprocessing
模塊中包含的Queue
或Pipe
之類的內容。
您可能需要在主線程中保留所有進程(本例中爲p
)的引用,以便能夠通知您的程序正在終止(因爲仍在運行的子進程會掛起父母死後),但這取決於你的程序的性質。
如果您想保留對象一樣,你可以做的幾件事情之一:
使您的所有對象屬性是單值或數組,然後做一些與此類似:
from multiprocessing import Process, Value, Array
class WebSocketApp(object):
def __init__(self):
self.my_value = Value('d', 0.3)
self.my_array = Array('i', [4 10 4])
# -- Snip --
然後這些值應該作爲共享內存。該類型是非常嚴格的,但(你必須指定它們的類型) 不同的答案是使用一個經理:爲共享內存中的列表和字典
from multiprocessing import Process, Manager
class WebSocketApp(object):
def __init__(self):
self.my_manager = Manager()
self.my_list = self.my_manager.list()
self.my_dict = self.my_manager.dict()
# -- Snip --
然後self.my_list
和self.my_dict
分別作用。
但是,這兩種方法的類型可能會受到限制,因此您可能需要使用Queue
和Semaphore
來滾動自己的技術。但這取決於你在做什麼。
查看multiprocessing文檔以獲取更多信息。
你試過['multiprocessing'模塊](https://docs.python.org/2.7/library/multiprocessing.html)嗎? – Johny
是的,但我想弄清楚如何共享內存。我需要自己的對象是同一個實例,而不是不同的實例。 –