延迟打开asyncio连接

时间:2015-12-10 08:29:43

标签: python-3.x python-asyncio

我的一些django REST服务必须连接到asyncio服务器才能获取一些信息。所以我在一个线程化的环境中工作。

连接时,open_connection()需要不合理的2秒(几乎完全相同,总是多一点)。

客户代码:

import asyncio
import datetime

def call():
    loop = asyncio.new_event_loop()
    asyncio.set_event_loop(loop)

    @asyncio.coroutine
    def msg_to_mars():
        print("connecting", datetime.datetime.now())
        reader, writer = yield from asyncio.open_connection('localhost', 8888, loop=loop)
        print("connected", datetime.datetime.now())  # time reported here will be +2 seconds
        return None

    res = loop.run_until_complete(msg_to_mars())
    loop.close()
    return res


call()

服务器代码:

import asyncio

@asyncio.coroutine
def handle_connection(reader: asyncio.StreamReader, writer: asyncio.StreamWriter):
    pass

loop = asyncio.get_event_loop()
asyncio.set_event_loop(loop)
# Each client connection will create a new protocol instance
coro = asyncio.start_server(handle_connection, '0.0.0.0', 8888, loop=loop)
server = loop.run_until_complete(coro)
# Serve requests until Ctrl+C is pressed
print('MARS Device server serving on {}'.format(server.sockets[0].getsockname()))
try:
    loop.run_forever()
except KeyboardInterrupt:
    pass

server.close()
loop.run_until_complete(server.wait_closed())
loop.close()

两者基本上都是从用于流式通信的asyncio文档样本中复制的,除了为线程附加分配事件循环外。

如何让这种延迟消失?

1 个答案:

答案 0 :(得分:0)

原来,问题发生在Windows DNS resolution

将我的计算机名称中的URL更改为127.0.0.1会立即导致延迟。