Как асинхронные актеры Ray обрабатывают вызовы методов синхронизацииPython

Программы на Python
Anonymous
 Как асинхронные актеры Ray обрабатывают вызовы методов синхронизации

Сообщение Anonymous »

Я работаю с асинхронными актерами Ray и хочу понять, что именно происходит — на глубоком техническом уровне — когда для такого актера вызывается синхронный метод.
Я знаю, что вызов синхронного метода приведет к блокировке, но мне нужно понять, как именно эта блокировка происходит в архитектуре актера.
На мой взгляд, их два. возможности:
  • Цикл событий в потоке актера вытесняется.
    • Асинхронный актер Ray работает в потоке, в котором находится цикл событий asyncio.
    • При вызове синхронного метода диспетчер Рэя вызывает метод синхронизации непосредственно для него. тот же поток, фактически приостанавливая цикл событий и запуская метод синхронизации.
    • После завершения метода синхронизации цикл событий возобновляется.
    • Это означает, что метод синхронизации блокирует поток, прерывая выполнение цикла событий.
  • Цикл событий сам выполняет синхронный метод
    • Синхронный метод каким-то образом оборачивается как сопрограмма/Future/Task и ставится в очередь задач цикла событий.
    • Цикл событий подхватывает его и выполняет в рамках обычного потока.
    • Блокирующее поведение метода синхронизации приводит к зависанию самого цикла событий до тех пор, пока не метод синхронизации завершается.
    • Это означает, что блокировка происходит «внутри» цикла событий, а не как внешнее прерывание.
Мне нужно либо точное пошаговое объяснение того, что происходит, либо ссылка на документацию или нужные части исходного кода.

Подробнее здесь: https://stackoverflow.com/questions/796 ... nc-methods

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