代码之家  ›  专栏  ›  技术社区  ›  Maddy

Celery+Eventlet+非阻塞请求

  •  11
  • Maddy  · 技术社区  · 11 年前

    我正在使用Python requests 在芹菜中 workers 进行大量(约10/sec)API调用(包括GET、POST、PUT、DELETE)。每个请求大约需要5-10秒才能完成。

    我试着让芹菜工人进来 eventlet 池,具有1000个并发。

    自从 请求 每个并发连接都在等待一个请求。

    我怎么做 请求 异步?

    2 回复  |  直到 11 年前
        1
  •  19
  •   maxkoryukov user111    8 年前

    使用eventlet monkey patching 以使任何纯python库不阻塞。

    • 补丁单库

      # import requests  # instead do this:
      import eventlet
      requests = eventlet.import_patched('requests')
      

      包装 erequests 和 grequests 可以简化为这两条线。

    • 修补所有内容

      import eventlet
      eventlet.monkey_patch()  # must execute as early as possible
      ...
      # everything is non-blocking now:
      import requests, amqp, memcache, paramiko, redis
      

    使现代化 :有 known issue 使用monkey修补请求库。如果您得到:

    ImportError: cannot import name utils
    

    ,然后将导入行修改为

    requests = eventlet.import_patched('requests.__init__')
    
        2
  •  3
  •   WeaselFox    11 年前

    来自 docs :

    有很多项目将请求与 Python的异步框架。两个很好的例子是 grequests 和 requests-futures.

    对于eventlet,您可以使用 erequests .