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

RQ任务执行requests请求时意外终止(Signal 11段错误)求助

解决RQ任务中requests请求触发Signal 11段错误的方案

以下是针对该问题的实用解决思路:

  • 检查依赖版本兼容性
    段错误常和依赖库版本冲突有关,尤其是requests、django-rq、RQ之间的版本适配问题。建议:

    • 锁定稳定版本的依赖,比如将requests固定在2.31.0、django-rq固定在最新兼容Django的稳定版,执行pip install --upgrade requests django-rq rq更新依赖。
    • 单独检查requests依赖的urllib3版本,尝试降级或升级urllib3(例如pip install urllib3==1.26.18),部分旧版urllib3在fork进程环境下可能存在内存访问问题。
  • 修改RQ Worker的运行模式
    RQ默认使用fork模式启动worker进程,fork后的子进程可能共享父进程的内存资源引发冲突。可以:

    • 启动worker时添加--no-fork参数,让worker直接在主进程执行:
      python manage.py rqworker default --no-fork
      
    • 减少worker并发数,比如只启动单个worker进程,避免多进程竞争内存资源。
  • 隔离requests的运行环境
    避免全局共享requests资源,在任务内部初始化会话或延迟导入:

    • 使用Session对象隔离请求上下文:
      def req_call():
          session = requests.Session()
          url = 'https://jsonplaceholder.typicode.com/posts'
          response = session.get(url)
          session.close()
          return response
      
    • 延迟导入requests到任务函数内部,避免模块加载阶段初始化全局资源:
      @django_rq.job('default')
      def test_request_call_on_rq_job():
          import requests
          url = 'https://jsonplaceholder.typicode.com/posts'
          response = requests.get(url)
          log.warning(f"REQUEST's RESPONSE {response.json()}")
      
  • 排查系统级内存问题

    • 用free -h命令检查服务器内存使用情况,若内存不足,可能导致进程内存访问异常,需扩容内存或清理其他占用内存的进程。
    • 排查是否有安全软件、内存监控工具拦截worker进程的内存访问,这类工具可能误判进程行为导致段错误。
  • 替换HTTP请求库
    如果以上方法无效,尝试切换到其他HTTP库绕开requests的问题,比如使用httpx:

    import httpx
    
    @django_rq.job('default')
    def test_request_call_on_rq_job():
        url = 'https://jsonplaceholder.typicode.com/posts'
        response = httpx.get(url)
        log.warning(f"REQUEST's RESPONSE {response.json()}")
    

内容的提问来源于stack exchange,提问作者Ramchandra Shahi Thakuri

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 16:22:43