以下代码在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中不再起作用的原因是什么?有没有一种方法可以更新代码以使其正常工作?
答案 0 :(得分:2)
我刚刚意识到这与异步无关。如果没有异步,它也会失败。解决方法是将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())