Ошибка с Observer при выходе из асинхронной функции только при использовании uvloop в качестве цикла событийPython

Программы на Python
Ответить
Anonymous
 Ошибка с Observer при выходе из асинхронной функции только при использовании uvloop в качестве цикла событий

Сообщение Anonymous »

Я не могу понять, почему я получаю сообщение об ошибке при завершении работы при использовании uvloop и не получаю ту же ошибку при использовании без него.
Ошибка: р>
ImportError: sys.meta_path is None, Python is likely shutting down

Мне нужно использовать Observer для просмотра файлов конфигурации и перенастройки поведения. Я получаю ошибку только тогда, когда вызываю Observer.stop() и Observer.join() И использую uvloop. Когда я их не вызываю, в выводе нет исключений. Не имеет значения, вызываю ли я функции stop() и join() из асинхронного кода (см. вариант 1) или из синхронного кода (см. вариант 2 (предпочтительный вариант) )).
if sys.platform != 'win32':
import uvloop
uvloop.install()

async def main(loop_container, connector, processor, observer):

loop_container.set_current_event_loop()

try:
connector.connect_exchange()
asyncio.create_task(processor.process_queue_events())
is_connected = await connector.is_connected()
await connector.start_symbol_watchings()

retry_delay = 1
while True:
await asyncio.sleep(retry_delay) # keepalive
# retry logic (...)

except asyncio.CancelledError:
logging.error(f'{Utils.get_current_datetime()} Execution has been cancelled.')

except Exception as exc:
logging.error(f'Unknown Error: {type(exc).__name__} {str(exc)}')

finally:
await connector.disconnect_exchange()

# Option 1
#observer.stop()
#observer.join()

if __name__ == "__main__":

try:

tick_data_queue = asyncio.Queue()
observer = Observer()
loop_container = EventLoopContainer()

config_abs_path = os.path.abspath(CONFIG_FILE_NAME)
output_abs_path = os.path.abspath(OUTPUT_FILE_NAME)
config_reader = ConfigReader(config_abs_path)
state_persister = StatePersister(output_abs_path, config_reader)

connector = ExchangeConnector(loop_container, tick_data_queue, config_reader, state_persister)
processor = TickProcessor(loop_container, tick_data_queue, config_reader, state_persister, connector)
event_handler = FileChangeHandler(loop_container, config_reader, state_persister, connector, processor)

observer.schedule(
event_handler,
path = os.path.dirname(config_abs_path),
recursive = False,
)
observer.start()

main_coro = main(loop_container, connector, processor, observer)
asyncio.run(main_coro)

# Option 2 (preferred)
#observer.stop()
#observer.join()

except Exception as exc::
logging.critical('Terminated.')

Я не получаю эту ошибку, если:
  • Я не использую uvloop
  • Я не вызываю ни одну из этих функций
Насколько я понимаю, поток, используемый классом Observer, каким-то образом конфликтует с асинхронный цикл.
Кто-нибудь знает, как решить эту проблему? проблема?
^C
2024-11-14|17:25:17.996 Execution has been cancelled.
2024-11-14|17:25:18.001 [symbol='ETH/USDT:USDT'] Connection error: ExchangeClosedByUser : Connection closed by the user.
2024-11-14|17:25:18.002 [symbol='BTC/USDT:USDT'] Connection error: ExchangeClosedByUser : Connection closed by the user.
2024-11-14|17:25:18.253 Disconnected from the exchange.
--- Logging error ---
--- Logging error ---
--- Logging error ---
--- Logging error ---
Exception ignored in:
Traceback (most recent call last):
File "uvloop/loop.pyx", line 2429, in uvloop.loop.Loop.call_exception_handler
File "/home/ubuntu/.pyenv/versions/3.13.0/lib/python3.13/logging/__init__.py", line 1548, in error
File "/home/ubuntu/.pyenv/versions/3.13.0/lib/python3.13/logging/__init__.py", line 1664, in _log
File "/home/ubuntu/.pyenv/versions/3.13.0/lib/python3.13/logging/__init__.py", line 1680, in handle
File "/home/ubuntu/.pyenv/versions/3.13.0/lib/python3.13/logging/__init__.py", line 1736, in callHandlers
File "/home/ubuntu/.pyenv/versions/3.13.0/lib/python3.13/logging/__init__.py", line 1026, in handle
File "/home/ubuntu/.pyenv/versions/3.13.0/lib/python3.13/logging/handlers.py", line 83, in emit
File "/home/ubuntu/.pyenv/versions/3.13.0/lib/python3.13/logging/__init__.py", line 1075, in handleError
File "/home/ubuntu/.pyenv/versions/3.13.0/lib/python3.13/traceback.py", line 129, in print_exception
File "/home/ubuntu/.pyenv/versions/3.13.0/lib/python3.13/traceback.py", line 1044, in __init__
File "/home/ubuntu/.pyenv/versions/3.13.0/lib/python3.13/traceback.py", line 492, in _extract_from_extended_frame_gen
File "/home/ubuntu/.pyenv/versions/3.13.0/lib/python3.13/traceback.py", line 369, in line
File "/home/ubuntu/.pyenv/versions/3.13.0/lib/python3.13/traceback.py", line 350, in _set_lines
File "/home/ubuntu/.pyenv/versions/3.13.0/lib/python3.13/linecache.py", line 25, in getline
File "/home/ubuntu/.pyenv/versions/3.13.0/lib/python3.13/linecache.py", line 41, in getlines
File "/home/ubuntu/.pyenv/versions/3.13.0/lib/python3.13/linecache.py", line 88, in updatecache
ImportError: sys.meta_path is None, Python is likely shutting down
--- Logging error ---
--- Logging error ---
--- Logging error ---
--- Logging error ---
Exception ignored in:
Traceback (most recent call last):
File "uvloop/loop.pyx", line 2429, in uvloop.loop.Loop.call_exception_handler
File "/home/ubuntu/.pyenv/versions/3.13.0/lib/python3.13/logging/__init__.py", line 1548, in error
File "/home/ubuntu/.pyenv/versions/3.13.0/lib/python3.13/logging/__init__.py", line 1664, in _log
File "/home/ubuntu/.pyenv/versions/3.13.0/lib/python3.13/logging/__init__.py", line 1680, in handle
File "/home/ubuntu/.pyenv/versions/3.13.0/lib/python3.13/logging/__init__.py", line 1736, in callHandlers
File "/home/ubuntu/.pyenv/versions/3.13.0/lib/python3.13/logging/__init__.py", line 1026, in handle
File "/home/ubuntu/.pyenv/versions/3.13.0/lib/python3.13/logging/handlers.py", line 83, in emit
File "/home/ubuntu/.pyenv/versions/3.13.0/lib/python3.13/logging/__init__.py", line 1075, in handleError
File "/home/ubuntu/.pyenv/versions/3.13.0/lib/python3.13/traceback.py", line 129, in print_exception
File "/home/ubuntu/.pyenv/versions/3.13.0/lib/python3.13/traceback.py", line 1044, in __init__
File "/home/ubuntu/.pyenv/versions/3.13.0/lib/python3.13/traceback.py", line 492, in _extract_from_extended_frame_gen
File "/home/ubuntu/.pyenv/versions/3.13.0/lib/python3.13/traceback.py", line 369, in line
File "/home/ubuntu/.pyenv/versions/3.13.0/lib/python3.13/traceback.py", line 350, in _set_lines
File "/home/ubuntu/.pyenv/versions/3.13.0/lib/python3.13/linecache.py", line 25, in getline
File "/home/ubuntu/.pyenv/versions/3.13.0/lib/python3.13/linecache.py", line 41, in getlines
File "/home/ubuntu/.pyenv/versions/3.13.0/lib/python3.13/linecache.py", line 88, in updatecache
ImportError: sys.meta_path is None, Python is likely shutting down


Подробнее здесь: https://stackoverflow.com/questions/791 ... p-as-event
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»