aiohttp在一段时间后停止发送

时间:2015-08-10 15:51:17

标签: python python-asyncio aiohttp

我正在编写一些需要向某些服务器发送并发HTTP请求的代码 如果它出错,它应该重试。 当我运行它时,我看到快速发送,几分钟后发送的速度降低到0.这就像是某些东西被锁定而且没有释放而它只是停止发送。

发送数据的功能是这个

@asyncio.coroutine
def handle_line(self, line, destination):
    while True:
        response = yield from aiohttp.request('POST', destination,
                                              data=line,
                                              headers=headers,
                                              connector=self.tcp_conn)
        if response.status == 200:
            self._succeeded += 1
            if self._succeeded % 20000 == 0 and self._succeeded != 0:
                logger.debug("Sent {} events from file".format(self._succeeded))
                self.update_dynamo_counter(destination)
            break
        elif response.status != 200:
            logger.debug("Error sending data. Status: {}".format(response.status))
            continue
    return (yield from response.read())

使用

初始化连接器
tcp_conn = aiohttp.TCPConnector(limit=100)

通过向列表添加800个任务然后等待它们以避免阻塞io来调用send函数

lines_to_send.append(asyncio.async(self.handle_line(json.dumps(data), destination)))
if len(lines_to_send) % 800 == 0:
    yield from asyncio.wait(lines_to_send)
    lines_to_send = []

我在调试它时遇到问题,甚至弄清楚问题是什么。 任何人都有线索?

0 个答案:

没有答案