我正在编写一些需要向某些服务器发送并发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 = []
我在调试它时遇到问题,甚至弄清楚问题是什么。 任何人都有线索?