【发布时间】:2019-05-22 11:32:29
【问题描述】:
您好,我在 python 3.7 中遇到了多处理问题 我做了一个监听器,它应该等待服务器的响应而不阻塞程序的其余部分(异步通信):
self = cl.appendSend('bar', base_list)
print("client erstellt neuen nebenläufigen listener, für die Antwort des Servers")
multiprocessing.set_start_method("spawn")
queue = multiprocessing.Queue()
process = multiprocessing.Process(target = cl.appendResponse(), args=(self))
process.start()
print("listener aktiv")
thread = threading.Thread(target= waitingPrinter(), args=(process, queue))
print(thread)
是一切开始的地方
但是process = multiprocessing.Process(target = cl.appendResponse(), args=(self)) 行启动一次,运行一次,然后在完成后再次运行。调试器永远不会离开这一行。
进程中运行的方法是:
def appendResponse(self):
print("nebenläufiger listener aktiv")
msgrcv = self.chan.receive_from(self.server)
print("nebenläufiger listener hat Antwort erhalten")
return msgrcv # pass it to caller
遗憾的是,由于版权问题,我无法真正发布更多内容,但该方法第一次运行良好,第二次失败并显示以下消息: Traceback(最近一次调用最后一次):
> File "D:/Verteile Systeme 2/neues Lab/git/vs2lab/lab2/rpc/runcl.py",
> line 27, in <module>
> process = multiprocessing.Process(target = cl.appendResponse(), args=(self)) File "C:\Program Files
> (x86)\Python37-32\lib\multiprocessing\process.py", line 82, in
> __init__
> self._args = tuple(args) TypeError: 'Client' object is not iterable
所以我想知道,为什么cl.appendResponse() 的进程甚至在绑定到进程时就开始了并且不等待process.start(),如果还没有回答,为什么它会直接运行一秒钟时间。当然,我该如何解决这个问题。
还有没有办法用线程替换处理并仍然获得返回值? 我在处理和返回值方面遇到了很多麻烦。
【问题讨论】:
标签: python multithreading python-multiprocessing