请问一下,有大佬遇到这种情况吗?
我在多进程情况下,每个启动rest client,但是遇到请求发送出去,没有接收到任何返回,代码直接卡住在方法块里。
在Mac OS下是正常的,但是代码上服务器就出现这种情况,服务器是Ubuntu操作系统。
怀疑可能是操作系统的问题,请问大家有没有什么思路,谢谢。
请问一下,有大佬遇到这种情况吗?
我在多进程情况下,每个启动rest client,但是遇到请求发送出去,没有接收到任何返回,代码直接卡住在方法块里。
在Mac OS下是正常的,但是代码上服务器就出现这种情况,服务器是Ubuntu操作系统。
怀疑可能是操作系统的问题,请问大家有没有什么思路,谢谢。
Linux上启动多进程的时候,默认是用fork而不是spawn(Windows和Mac),会导致和socket网络通讯有关的组件在内存对象复制时出现问题
import multiprocessing as mp
def foo(q):
q.put('hello')
if __name__ == '__main__':
mp.set_start_method('spawn')
q = mp.Queue()
p = mp.Process(target=foo, args=(q,))
p.start()
print(q.get())
p.join()
参考上面的例子,用set_start_method修改下启动方式试试吧
MTF wrote:
import multiprocessing as mp def foo(q): q.put('hello') if __name__ == '__main__': mp.set_start_method('spawn') q = mp.Queue() p = mp.Process(target=foo, args=(q,)) p.start() print(q.get()) p.join()
参考上面的例子,用set_start_method修改下启动方式试试吧
确实是这样的,我后面也有找到类似的信息,我后面改了一下代码,multiprocessing.get_context('spawn')用了这个函数,应该是和大佬一样的效果,顺利解决了,非常感谢!