Python 3.8 中异步内部的多处理失败(无法腌制本地对象)



以下代码在python 3.7中有效,但在python 3.8(AttributeError: Can't pickle local object 'main.<locals>.f'(中无效

import multiprocessing as mp
import asyncio
async def main():
def f():
print("hello")
p = mp.Process(target=f)
p.start()
if __name__ == "__main__":
asyncio.run(main())

我知道在异步函数中运行进程不是一件常见的事情,可能会引起一些人的注意,但我发现它有时很有用。它在python 3.8中不再工作的原因是什么?有没有办法更新代码使其工作?

我刚刚意识到这与异步无关。如果没有异步,它也会失败。修复方法是将f移动到main之外。但不确定为什么现在python 3.8中需要这样做。

import multiprocessing as mp
import asyncio
def f():
print("hello")
async def main():
p = mp.Process(target=f)
p.start()
if __name__ == "__main__":
asyncio.run(main())

相关内容

  • 没有找到相关文章

最新更新