You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 19:22:38