VeighNa量化社区
你的开源社区量化交易平台
Member
avatar
加入于:
帖子: 2
声望: 0

请问一下,有大佬遇到这种情况吗?
我在多进程情况下,每个启动rest client,但是遇到请求发送出去,没有接收到任何返回,代码直接卡住在方法块里。
在Mac OS下是正常的,但是代码上服务器就出现这种情况,服务器是Ubuntu操作系统。
怀疑可能是操作系统的问题,请问大家有没有什么思路,谢谢。

Member
avatar
加入于:
帖子: 1468
声望: 105

Linux上启动多进程的时候,默认是用fork而不是spawn(Windows和Mac),会导致和socket网络通讯有关的组件在内存对象复制时出现问题

Member
avatar
加入于:
帖子: 1468
声望: 105
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修改下启动方式试试吧

Member
avatar
加入于:
帖子: 2
声望: 0

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')用了这个函数,应该是和大佬一样的效果,顺利解决了,非常感谢!

© 2015-2022 上海韦纳软件科技有限公司
备案服务号:沪ICP备18006526号

沪公网安备 31011502017034号

【用户协议】
【隐私政策】
【免责条款】