我希望在后台运行一个重度计算任务而不阻塞IO。问题在于我的主函数不依赖于这个重度任务,需要在执行重度计算任务之前/同时返回值。下面是一个例子:
def main(args):
transformed_data_list:List[Dict] = translate_request_to_object(args)
status = insert_data_into_db(transformed_data:Dict)
if(status)
# running background task
asyncio.run(process_background_task(transformed_data_list))
# Here, I want to return a success response as soon as data inserted into db
return "data insert into db"
async process_background_task(transformed_data_list:List[Dict]):
for data in transformed_data_list:List:
asyncio.create_task(heavy_computation_task(data))
但是以上代码在 process_background_task
完成之前不会返回响应。
ProcessPoolExecutor
而不是ThreadPoolExecutor
?并且我从哪里调用asyncio.run(main(...))
会再次阻塞父函数,对吗? - MathProblemasyncio.run(main(...))
会阻塞它所在的函数。 - Oleg Utkin