簡體   English   中英

Celery + Eventlet +非阻塞請求

[英]Celery + Eventlet + non blocking requests

我在芹菜workers使用Python requests來進行大量(~10 /秒)API調用(包括GET,POST,PUT,DELETE)。 每個請求大約需要5到10秒才能完成。

我嘗試在eventlet池中運行芹菜工作eventlet ,具有1000個並發性。

由於requests是阻塞進程,因此每個並發連接都在等待一個請求。

如何異步requests

使用eventlet monkey補丁使任何純python庫無阻塞。

  • 補丁單庫

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

    erequestsgrequests可以被剝離到這兩行。

  • 一切都好

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

更新 :猴子修補請求庫存在已知問題 如果你得到:

ImportError: cannot import name utils

,然后修改導入行

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

來自文檔

有很多項目將Requests與Python的異步框架結合起來。 兩個很好的例子是grequestsrequests-futures。

對於eventlet,您可以使用erequests

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM