Grpc.aio + uvloop вызывает BlockingIOError: [Errno 35] Ресурс временно недоступенPython

Программы на Python
Anonymous
Grpc.aio + uvloop вызывает BlockingIOError: [Errno 35] Ресурс временно недоступен

Сообщение Anonymous »

Я перенес службу Python из вызовов синхронизации grpcio, завернутых в asyncio.to_thread(...) в собственный grpc.aio, чтобы уменьшить задержку каждого вызова, но после переключения я начал неоднократно видеть эту ошибку в цикле событий:

Код: Выделить всё

ERROR:asyncio:Exception in callback PollerCompletionQueue._handle_events(...)
Traceback (most recent call last):
File "/opt/homebrew/Cellar/python@3.11/3.11.13/Frameworks/Python.framework/Versions/3.11/lib/python3.11/asyncio/events.py", line 84, in _run
self._context.run(self._callback, *self._args)
File "src/python/grpcio/grpc/_cython/_cygrpc/aio/completion_queue.pyx.pxi", line 148, in grpc._cython.cygrpc.PollerCompletionQueue._handle_events
BlockingIOError: [Errno 35] Resource temporarily unavailable
Я также вижу тот же путь обратного вызова при работе с uvloop:
Что изменилось

Код: Выделить всё

response = await asyncio.to_thread(
self.stub.Predict, request, timeout=timeout
)
После перехода на grpc.aio при запуске теперь создаются и активируются асинхронные каналы/заглушки gRPC, например:
manager = AsyncGrpcChannelManager()

await Manager.warm_up()

stub = await Manager.get_stub()

resp = await stub.LoadModel(load_req, timeout=timeout)
  • Известна ли это несовместимость между grpc.aio и uvloop/Granian?
Попробует все подходы. Помощь приветствуется.
Это среда
  • Python 3.11.13
  • grpcio==1.76.0
  • uvloop==0.22.1
  • работает под Гранианом

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