Найти - Пользователи
Полная версия: Написание асинхронного кода
Начало » Python для новичков » Написание асинхронного кода
1
d54wvzc+i5zirs
Подскажите пожалуйста, можно ли на чистом python (без привлечения сторонних библиотек) писать асинхронный код. Интересно именно можно или нет писать без готовых библиотек потому, что хочу понять суть того как все работает, в общем это мне нужно в целях образования.
john123
Можно. Используйте для этого встроенные модули threading или multiprocessing
А если серьезно, то зависит от того, что Вы понимаете под “асинхронностью”: если это Event-driven programming, то, как понятно из названия, нужно что-то, что будет вызывать эти самые события (events).

С точки зреня компьютерного “железа”, события как правило вызывают устройства, например сетевая карта при получении новой порции данных. При этом срабатывает прерывание, которое передает управление обработчику прерываний.
Немного о том, что такое прерывание: https://ru.wikipedia.org/wiki/%CF%F0%E5%F0%FB%E2%E0%ED%E8%E5

При загрузке, каждая операционная система строит свою собственную таблицу прерываний. Всё это происходит в рамках загрузки драйверов устройств.
Далее обработчики прерываний могут генерировать системные события, в зависимости от архитектуры системы.

Вот в этом процессе обработки прерываний как раз и заключается та самая “асинхронность”, т.к. процессор при каждом таком прерывании приостанавливает свою работу и переключается на выполнение обработчика прерываний.

Таким образом можно сделать вывод, что для того, чтобы получить доступ к этим самым системным event'ам, нужно напрямую общаться с ядром системы. В случае с Unix почитайте про системные вызовы select, poll и т.д. Под Windows, насколько я помню, подобные вызовы “зашиты” в функционал WinSock.

В Python имеется модуль для подобного общения с ОС. Называется select:
https://docs.python.org/2/library/select.html
Посмотрите документацию, там осуществляются системные вызовы select/poll/epoll. Под Windows, судя по документации, работать будет только с сетевыми сокетами (WinSock).

Подводя итоги, посоветую Вам почитать про эти системные вызовы и про то, как работает компьютерное железо в целом. Тогда Вы сможете для себя уяснить принципы работы того самого асинхронного программирования.
Также советую закинуть в копилку знаний информацию о том, как работает многопоточность и многопроцессность. Это всё очень рядом с базовыми принципами работы ОС.
Singularity
Вот вам пример кода без использования библиотек
while True: 
    while queue:
        queue.pop()()
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB