как реализовать низкоуровневую функцию асинхронного ввода-вывода - PullRequest
0 голосов
/ 28 декабря 2018

Python может переключать контексты в ожидании функций asyncio.sleep и aiohttp.Как Python в конечном итоге узнает, когда контекст должен переключаться?Если я хотел реализовать свои собственные функции ввода-вывода, какие API нам нужно вызывать?

На основе http://www.dabeaz.com/coroutines/Coroutines.pdf, мы можем использовать select api, чтобы позволить контексту переключаться при программировании с yield.В Python 3 с async и await, это все еще единственный путь?

1 Ответ

0 голосов
/ 31 декабря 2018

Вы задаете вопросы о C внутренностях Python.В настоящее время нет C API для доступа к циклу asyncio.Если вам нужно написать асинхронный код C, посмотрите этот ответ:

python - как реализовать C-функцию как ожидаемую (сопрограмма)

мы можем использоватьвыберите api, чтобы позволить контексту переключаться при программировании с yield.В Python 3 с async и await, это все еще единственный путь?

Вам не нужно знать внутренности, чтобы использовать его.Если вы хотите узнать больше о различных способах создания цикла событий в C, посмотрите эту библиотеку:

https://github.com/aisk/libae

См. Код в src для epoll, kqueue, выберите.

Также обратите внимание, что вы можете заменить цикл событий asyncio этим модулем python.Так что вы можете узнать больше и здесь.Цикл событий Uvloop использует библиотеку C libuv.

https://github.com/MagicStack/uvloop

Если у вас есть дополнительные вопросы о коде C, добавьте их в виде комментариев ниже, и я могу заполнить дополнительную информацию.

...