aiomultiprocess Worker 的简单玩法
aiomultiprocess Worker 是每次都创建一个新的进程,简单场景使用起来比较方便,如果有大量任务以及批量任务并不是很很好,推荐使用Pool
worker 玩法
玩法比较简单,就是创建任务,配置参数
- 参考代码
任务定义
async def do_task(module_name, task_name):
module = importlib.import_module(module_name)
ns = Collection.from_module(module)
executor = Executor(ns)
weakref.finalize(executor, lambda: print(f"Executor for {module_name} finalized"))
weakref.finalize(ns, lambda: print(f"Collection for {module_name} finalized"))
weakref.finalize(module, lambda: print(f"module for {module_name} finalized"))
result = executor.execute(task_name)
return [{'name':key.name,'value':value} for key,value in result.items()]
async def run_task(module_name, task_name):
result = await Worker(
target=do_task,
args=(module_name, task_name),
kwargs={}
)
return result
说明
以前也说过对象应该是可以pickle 序列化的,不然会有错误提示,worker 有一个好处是每次都是加载新的模块(新进程),对于希望使用隔离环境比较友好
参考资料
https://aiomultiprocess.omnilib.dev/en/latest/guide.html#workers
浙公网安备 33010602011771号