Python asyncio отказывается признать новые циклы событий - PullRequest
0 голосов
/ 01 июня 2018

Я впервые играю с Asyncio на Python, пожалуйста, потерпите меня.У меня есть цикл for, который интегрирует асинхронное, и то, что показалось очень логичным для меня, по-видимому, совершенно неправильно.

В конце цикла я закрываю цикл, затем создаю и устанавливаю новый цикл для продолжения сценария.Тем не менее, я продолжаю получать сообщение об ошибке «Цикл событий закрыт», но не всегда, возможно, примерно в 2/3 времени.

Чего мне здесь не хватает?

try:
    for data in targetData:
        loop = asyncio.get_event_loop()
        graph = loop.run_until_complete(load_graph(data))
        paths = bellman_ford(graph, unique_paths=True)

        for path in paths:
            try:
                print_opportunity_for_path(graph, path)
            except Exception as exc:
                print ('Error: {}'.format(exc))

        asyncio.wait(1)
        loop.close()
        newLoop = asyncio.new_event_loop()
        assert(loop != newLoop)
        asyncio.set_event_loop(newLoop)

Это сводит меня с ума :) Я даже зашел так далеко, что добавил случайное ожидание и, вероятно, ненужное утверждение.

Изменить: Похоже на стороннюю библиотеку, которая вызывает головные боли ..?

    Exception ignored in: <bound method Exchange.__del__ of <ccxt.async.gdax.gdax object at 0x7fe09c07b0f0>>
    Traceback (most recent call last):
      File "/home/hyoon/scripts/arb/local/lib/python3.6/site-packages/ccxt/async/base/exchange.py", line 64, in __del__
        self.asyncio_loop.run_until_complete(self.session.close())
      File "/usr/lib/python3.6/asyncio/base_events.py", line 444, in run_until_complete
        self._check_closed()
      File "/usr/lib/python3.6/asyncio/base_events.py", line 358, in _check_closed
        raise RuntimeError('Event loop is closed')
    RuntimeError: Event loop is closed
    /home/hyoon/scripts/arb/local/lib/python3.6/site-packages/peregrinearb/utils/data_structures.py:62: RuntimeWarning: coroutine 'ClientSession.close' was never awaited
      heapq.heappush(self.heap, (pri, d))
    Unclosed client session
    client_session: <aiohttp.client.ClientSession object at 0x7fe09c07b400>
    Unclosed connector
    connections: ['[(<aiohttp.client_proto.ResponseHandler object at 0x7fe0a79cc160>, 696463.579907268), (<aiohttp.client_proto.ResponseHandler object at 0x7fe09aea6898>, 696463.613516469), (<aiohttp.client_proto.ResponseHandler object at 0x7fe09aea69b0>, 696463.615550519), (<aiohttp.client_proto.ResponseHandler object at 0x7fe09aea6a20>, 696463.616189468), (<aiohttp.client_proto.ResponseHandler object at 0x7fe09af0a630>, 696463.616714588), (<aiohttp.client_proto.ResponseHandler object at 0x7fe09aea6940>, 696463.621970396), (<aiohttp.client_proto.ResponseHandler object at 0x7fe09aea6860>, 696463.622567727), (<aiohttp.client_proto.ResponseHandler object at 0x7fe09aea6908>, 696463.624466974), (<aiohttp.client_proto.ResponseHandler object at 0x7fe09aea6978>, 696463.625720629), (<aiohttp.client_proto.ResponseHandler object at 0x7fe09aea68d0>, 696463.630833432), (<aiohttp.client_proto.ResponseHandler object at 0x7fe09aea69e8>, 696463.635552591), (<aiohttp.client_proto.ResponseHandler object at 0x7fe09aea6a58>, 696463.639611507)]']
    connector: <aiohttp.connector.TCPConnector object at 0x7fe09c07b390>
    Fatal write error on socket transport
    protocol: <asyncio.sslproto.SSLProtocol object at 0x7fe09aea6ba8>
    transport: <_SelectorSocketTransport fd=7>
    Traceback (most recent call last):
      File "/usr/lib/python3.6/asyncio/selector_events.py", line 761, in write
        n = self._sock.send(data)
    OSError: [Errno 9] Bad file descriptor
    Fatal error on SSL transport
    protocol: <asyncio.sslproto.SSLProtocol object at 0x7fe09aea6ba8>
    transport: <_SelectorSocketTransport closing fd=7>
    Traceback (most recent call last):
      File "/usr/lib/python3.6/asyncio/selector_events.py", line 761, in write
        n = self._sock.send(data)
    OSError: [Errno 9] Bad file descriptor
...