假设我有一个名为my_object
的对象。我想创建3个不同的my_object
实例并运行绑定方法my_object.test()
,对象方法的每个实例都在不同的进程中运行。 my_object
构造函数创建并启动一个线程,test()
应该通过队列向线程发送消息。然后该线程打印该消息。 my_object
看起来像这样:
class my_object():
class my_thread(threading.Thread):
def __init__(self, message_queue):
threading.Thread.__init__(self)
self.message_queue = message_queue
def run(self):
while not self.message_queue.empty():
try:
message = self.message_queue.get_nowait()
print message
except Queue.Empty:
time.sleep(0.1)
def __init__(self):
self.message_queue = Queue.Queue()
self.mythread = my_object.my_thread(self.message_queue)
self.mythread.start()
def test(self):
print "Sending message"
message = "test"
self.message_queue.put(message)
当我开始这样的过程时:
if __name__ == "__main__":
obj = my_object()
p = Process(target=obj.test)
p.start()
p.join()
test()
将执行print命令,但线程永远不会收到放在message_queue.
上的消息当我启动这样的过程时:
def test():
obj = my_object()
obj.test()
if __name__ == "__main__":
p = Process(target=test)
p.start()
p.join()
我的代码按预期工作。
(请注意我的main
方法和my_object
代码位于不同的文件中)
我已经读过您无法挑选绑定方法,但我认为这仅适用于multiprocess.Pool
,更不用说obj.test()
正在执行,但它确实似乎无法访问my_object
实例的其余部分。我的假设是多进程只是挑选test
方法而不是对象实例的其余部分。那是对的吗?如果没有,为什么第二种方法有效,而不是第一种?
修改:包含my_object
代码正文