python tornado异步客户端

时间:2018-01-24 21:08:56

标签: python asynchronous tornado

我创建了批量延迟的http(异步)客户端,它允许触发多个异步http请求,最重要的是它允许延迟请求的启动,例如,一次不会触发100个请求。

但它有一个问题。 http .fetch()方法有一个handleMethod参数来处理响应,但我发现如果提取后的延迟(休眠)不够长,则甚至不会触发handle方法。 (也许请求被杀或同时发生了什么)。

它可能与.run_sync方法有关。如何解决?我想提出延迟,但不希望这个问题发生。

我需要解析响应无论请求需要多长时间,无论以下睡眠调用如何(该调用还有其他原因,如我所说,并且根本不应与响应处理相关)

class BatchDelayedHttpClient:

  def __init__(self, requestList):
    # class members
    self.httpClient = httpclient.AsyncHTTPClient()
    self.requestList = requestList
    ioloop.IOLoop.current().run_sync(self.execute)

  @gen.coroutine
  def execute(self):
    print("exec start")
    for request in  self.requestList:
        print("requesting " + request["url"])
        self.httpClient.fetch(request["url"], request["handleMethod"], method=request["method"], headers=request["headers"], body=request["body"])
        yield gen.sleep(request["sleep"])
    print("exec end")

0 个答案:

没有答案