为什么赢了';我的进程不能加入python吗? 编辑问题以删除其他错误
我有一个程序,一旦进程完成就不会加入。如何使其正确连接为什么赢了';我的进程不能加入python吗? 编辑问题以删除其他错误,python,process,multiprocessing,pipe,zeromq,Python,Process,Multiprocessing,Pipe,Zeromq,我有一个程序,一旦进程完成就不会加入。如何使其正确连接 import time import sys import zmq from multiprocessing import Process, Pipe def client(address, pipe_send): try: context = zmq.Context() socket = context.socket(zmq.PAIR) socket.setsockopt(zmq.
import time
import sys
import zmq
from multiprocessing import Process, Pipe
def client(address, pipe_send):
try:
context = zmq.Context()
socket = context.socket(zmq.PAIR)
socket.setsockopt(zmq.RCVTIMEO,5000)
socket.connect(address)
print("client connected")
while True:
msg = str(pipe_send.recv())
print("CLIENT $$",msg)
if msg:
socket.send_unicode(msg)
recv_msg = socket.recv_unicode()
print("CLIENT ::", recv_msg)
else:
break
except:
print(
"client exited with '%s' while multiprocessing"
% (sys.exc_info(),)
)
def server(address):
try:
context = zmq.Context()
socket = context.socket(zmq.PAIR)
socket.setsockopt(zmq.RCVTIMEO,5000)
socket.bind(address)
while True:
try:
msg = socket.recv_unicode()
print("SERVER ::",msg)
socket.send_unicode("Message sent successfully")
time.sleep(1)
except:
break
except:
print(
"server exited with '%s' while multiprocessing"
% (sys.exc_info(),)
)
if __name__ == "__main__":
req_pipe, rep_pipe = Pipe()
addr = "tcp://127.0.0.1:1235"
s = Process(target=server,args=(addr,))
s.start()
c = Process(target=client,args=(addr,rep_pipe))
c.start()
for i in range(10):
req_pipe.send(i)
s.join()
c.join()
您已将s定义为start()
的返回值,而不是进程本身,并且start()
的返回值必须是None
,它没有联接方法
您已将s定义为start()
的返回值,而不是进程本身,并且start()
的返回值必须是None
,它没有联接方法。
- 不要将
过程(..).start()分配给s
/c
- 发送sentinel值以通知数据结束。我用了
''
- 不要将
过程(..).start()分配给s
/c
- 发送sentinel值以通知数据结束。我用了
''
这修复了回溯错误,但现在进程不会加入。为了解决这个问题,我在上面修改了我的代码,但是没有用。这修复了回溯错误,但是现在进程不会加入。为了修复此问题,我在上面更改了代码,但没有起到任何作用。为什么通过管道发送“”最终会加入进程?@user1876508,因为您的客户端函数预计到了这一点。我不知道在if中“”等于零statements@user1876508,空字符串,空列表,空元组,dict,set。。。如果它们用作谓词,则被视为False。为什么通过管道发送“”最终会加入进程?@user1876508,因为您的客户端
函数预期会这样。我不知道在if中“”等于零statements@user1876508,空字符串,空列表,空元组,dict,set。。。如果它们用作谓词,则被视为False。
s = Process(target=server,args=(addr,)).start()
if __name__ == "__main__":
req_pipe, rep_pipe = Pipe()
addr = "tcp://127.0.0.1:1235"
s = Process(target=server,args=(addr,))
s.start()
c = Process(target=client,args=(addr,rep_pipe))
c.start()
for i in range(10):
req_pipe.send(i)
req_pipe.send('') # End of data.
c.join()
s.join()