Как я могу поддерживать два активных потока asyncio без TimeoutError? - PullRequest
2 голосов
/ 11 мая 2019

Я пытаюсь использовать asyncio для управления соединениями в сетевом приложении p2p.Я пытаюсь поддерживать большое количество (~ 300) соединений, используя потоки asyncio.

Я использую python3.6, и каждый раз он зависает и время ожидания для asyncio.open_connection (...).

async def example():
    reader, writer = await asyncio.open_connection(ip, port) 
    writer.write(handshake)
    await writer.drain()
    response = await reader.read(RESP_SIZE)
    errcode, results = await worker(reader, writer, workerdata)

    # This is the line it hangs and times out on
    reader2, writer2 = await asyncio.open_connection(ip2, port2)
    # Second, identical handshake sequence here
    writer2.write(handshake)
    await writer2.drain()
    response = await reader2.read(RESP_SIZE)
    errcode, results = await worker(reader2, writer2, workerdata2)


def main():

    loop = asyncio.get_event_loop()
    loop.run_until_complete(example())
    loop.close()

Тривиальный пример работает для одного соединения, но как только я пытаюсь выполнить рукопожатие / открыть второе соединение, оно зависает, и я получаю

TimeoutError: [Errno 110] Connect call failed

Возможно ли иметь несколькоподключения к разным парам ip / port клиента одновременно с использованием потоков asyncio?Есть ли другая асинхронная библиотека, которая больше подходит для этого?

1 Ответ

0 голосов
/ 11 мая 2019

Зависает, потому что рабочий заходит в тупик, ожидая какого-то постороннего сообщения.Совет, всегда используйте таймауты.

...