在Python中将asyncio与fork混合:不好的主意?

问题描述

在我编写的代码中,我曾经同时拥有线程和多个进程一个分支:

  • 用于Websocket连接的线程(和其他一些后台任务)
  • multiprocessing 分支创建一个可以重新加载的隔离内存进程

这有时会导致挂起过程。我了解到,将这两者混合是一个坏主意,因为分叉的进程正在等待不存在的线程放弃其锁:

我正在考虑重写我的代码以代替asyncio来执行后台任务,但是我不确定这是否解决了我的问题,因为我不熟悉asyncio在罩。 asyncio是否使用锁来执行上下文切换?分叉程序是否继承了所有协程?分叉的过程会以某种方式卡住吗?

链接文章建议了一些解决此问题的替代方法,这些替代方法不适用于我的情况:

  • 使用spawn而不是fork来不复制当前内存,而是以全新的过程开始
  • 在旋转线程之前分叉

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)