如何解决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())
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。