使用patent-client的Python脚本执行后挂起,如何终止异步线程?
解决patent-client脚本执行后无法终止的问题
你使用patent-client包编写的专利检索脚本已完成所有打印输出,但进程始终无法终止,通过threading.enumerate()发现残留asyncio和AnyIO工作线程。以下是几种可行的解决方法:
显式关闭AnyIO事件循环
patent-client底层依赖AnyIO处理异步任务,脚本结束时可能未正确清理事件循环。在脚本末尾添加以下代码强制关闭:import anyio anyio.from_thread.blocking.cancel_all_tasks() anyio.from_thread.blocking.stop()使用同步上下文管理器包裹异步操作
调整脚本结构,用anyio.run()包裹核心异步逻辑,确保任务完成后自动清理事件循环:from patent_client import USApplication, Assignment import anyio company_name = 'Luminopia' async def main(): print("Company name: {}".format(company_name)) print("Getting applications") applicant_apps = await USApplication.objects.filter(first_named_applicant=company_name).values_list('appl_id', flat=True).ato_list() print("Found {} applications".format(len(applicant_apps))) print("Getting assignments") assigned_apps = await Assignment.objects.filter(assignee=company_name).explode('properties').values_list('appl_id', flat=True).ato_list() print("Found {} assignments".format(len(assigned_apps))) if __name__ == "__main__": anyio.run(main)注意将同步方法
.to_list()替换为异步版本.ato_list(),保证异步任务在受控环境中执行。强制终止进程(兜底方案)
若前两种方法无效,可直接强制终止进程,跳过资源清理(仅建议作为最后手段):import os os._exit(0)
内容的提问来源于stack exchange,提问作者Hubert B
相关产品推荐
相关产品推荐

