Celery + Eventlet + non blocking requests

这一生的挚爱 提交于 2019-11-28 10:07:48
temoto

Use eventlet monkey patching to make any pure python library non-blocking.

  • patch single library

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

    packages erequests and grequests could be stripped down to these two lines.

  • patch everything

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

Update: there is known issue with monkey patching requests library. If you get:

ImportError: cannot import name utils

, then modify import line to

requests = eventlet.import_patched('requests.__init__')

from the docs:

there are lots of projects out there that combine Requests with one of Python’s asynchronicity frameworks. Two excellent examples are grequests and requests-futures.

for eventlet specifically you can use erequests.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!