以下代码在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())