我正在尝试创建一个共享资源,我可以在其中使用 aiohttp.ClientSession() 对象来获取某些数据。这允许我使用并行化来加速实际计算。
但是,当我尝试创建一个使用 aiohttp.ClientSession 的管理器时,会出现错误:TypeError: no default __reduce__ due to non-trivial __cinit__
.
我不确定发生了什么,也许有人可以帮助我了解此错误的含义以及我如何实际初始化使用 aiohttp.ClientSession 的管理器。
import asyncio
import aiohttp
# import nest_asyncio
from multiprocessing.managers import BaseManager
class Session:
def __init__(self, loop):
asyncio.set_event_loop(loop)
self.session = aiohttp.ClientSession()
class MyManager(BaseManager):
pass
# nest_asyncio.apply()
MyManager.register('Session', Session)
loop = asyncio.get_event_loop()
with MyManager() as manager:
session = manager.Session(loop)
作为备用解决方案,我可以使用请求,在 BaseManager 中注册时似乎没有问题。但是,这将严重阻碍我的进程,因为我有相当大的工作负载运行超过 60 多个并行进程,其中每个数据调用都需要相当长的时间才能完成。
import requests
from multiprocessing.managers import BaseManager
class Session:
def __init__(self):
self.session = requests.Session()
class MyManager(BaseManager):
pass
MyManager.register('Session', Session)
with MyManager() as manager:
session = manager.Session()
我希望有人可以帮助我,并提前非常感谢!