6 ответов:
посмотри здесь:
асинхронное программирование на Python
введение в асинхронное программирование и Twisted
стоит проверить:
asyncio (ранее Tulip) был проверен в ветке Python по умолчанию
отредактировано 14-Mar-2018
сегодня в Python есть asyncIO-асинхронный ввод-вывод, цикл событий, сопрограммы и задачи построен в.
описание взято из вышеприведенной ссылки:
The ввода-вывода модуль предоставляет инфраструктуру для записи однопоточной параллельный код с использованием сопрограмм, мультиплексирование доступа ввода-вывода через сокеты и другие ресурсы, работающие сетевые клиенты и серверы, а также другие родственные примитивы. Вот более подробный список пакета содержание:
- сменный цикл событий с различных конкретных систем реализации;
- абстракции транспорта и протокола (похожие на те, что в Twisted);
- конкретная поддержка для TCP, UDP, SSL, труб подпроцесса, задержанных вызовов, и другие (некоторые могут быть зависимыми от системы);
- будущий класс, который имитирует один в параллельных.модуль futures, но адаптированный для использования с циклом событий;
- сопрограммы и задачи на основе доходности от (PEP 380), до помогите написать параллельный код в последовательном режиме мода;
- поддержка отмены для фьючерсов и сопрограмм;
- примитивы синхронизации для использования между сопрограммами в одном потоке, имитируя те, что в модуль резьбы;
- интерфейс для передачи работы в пул потоков, для случаев, когда вы абсолютно, положительно должны использовать библиотеку, которая блокирует вызовы ввода-вывода.
асинхронное программирование является более сложным чем классический " последовательный" Программирование: см.развивать с ввода-вывода страница который перечисляет общие ловушки и объясняет, как их избежать. Включить режим отладки во время разработки для обнаружения общих проблем.
также стоит проверить:
руководство по асинхронному программированию на Python с asyncIO
то, что вы описываете (основной поток программы немедленно возобновляется при выполнении другой функции), обычно не называется "асинхронным" (он же "управляемый событиями") программированием, а скорее "многозадачностью" (он же "многопоточность" или "многопроцессорность"). Вы можете получить то, что вы описали стандартные библиотечные модули
threadingиmultiprocessing(последний допускает фактическое параллельное выполнение на многоядерных машинах).асинхронное (управляемое событиями) Программирование поддерживается в стандартная библиотека Python в
asyncoreиasynchatмодули, которые очень ориентированы на сетевые задачи (действительно, они внутренне используютselectмодуль, который в Windows поддерживает только сокеты - хотя в Unixy OSs он также может поддерживать любой файловый дескриптор).для более общего (хотя и в основном ориентированного на сеть, но не limited к этому) поддержка асинхронного (событийного) программирования, проверьте витая сторонних пакет.
хорошие новости для всех!
Python 3.4 будет включать в себя совершенно новое амбициозное асинхронное программирование реализация!
в настоящее время называется тюльпан и уже активный следующее.
Как описано в PEP 3153: асинхронная поддержка ввода-вывода и PEP 3156: асинхронная поддержка ввода-вывода перезагружена:
люди, которые хотят писать асинхронный код в Python сейчас есть несколько вариантов:
- asyncore и asynchat;
- что-то на заказ, скорее всего на основе выбора модулей;
- использование сторонних библиотек, таких как витая или gevent.
к сожалению, каждый из этих вариантов имеет свои недостатки, которые этот PEP пытается решить.
несмотря на то, что он долгое время был частью стандартной библиотеки Python время, модуль asyncore страдает от фундаментальных недостатков, вытекающих из негибкого API, который не соответствует ожиданиям современного асинхронного сетевого модуля.
кроме того, его подход слишком упрощен, чтобы предоставить разработчикам все инструменты, необходимые для того, чтобы в полной мере использовать потенциал асинхронной сети.
самое популярное решение, которое сейчас используется в производстве, предполагает использование сторонних библиотек. Они часто обеспечивают удовлетворительные решения, но существует недостаток совместимости между этими библиотеками, что приводит к тому, что кодовые базы очень тесно связаны с библиотекой, которую они используют.
Это текущее отсутствие переносимости между различными асинхронными библиотеками ввода-вывода вызывает много дублированных усилий для разработчиков сторонних библиотек. Достаточно мощная абстракция может означать, что асинхронный код пишется один раз, но используется везде.
здесь краткая обзор его способностей.
другие респонденты указывают вам на Twisted, который является отличным и очень всеобъемлющим фреймворком, но, на мой взгляд, он имеет очень непифонический дизайн. Кроме того, AFAICT, вы должны использовать витой основной цикл, который может быть проблемой для вас, если вы уже используете что-то другое, что обеспечивает свой собственный цикл.
вот надуманный пример, который продемонстрирует использование
threadingмодуль:from threading import Thread def background_stuff(): while True: print "I am doing some stuff" t = Thread(target=background_stuff) t.start() # Continue doing some other stuff nowоднако, в почти каждом полезном случае, вы захотите связь между потоками. Вы должны посмотреть в примитивы синхронизации, и ознакомиться с понятием параллелизм и связанные с ними вопросы.
The
threadingмодуль предоставляет много таких примитивов для использования, если вы знаете, как их использовать.
вы вполне можете проверить витую библиотеку для Python. Они предоставляют много полезных инструментов.
вы можете увидеть мой инструмент асинхронного программирования Python: http://www.ideawu.com/blog/2010/08/delegate-in-pythonpython-asynchronous-programming.html
import time, random, sys from delegate import * def proc(a): time.sleep(random.random()) return str(a) def proc_callback(handle, args=None): ret = d.end(handle) d = Delegate() d.init(2) # number of workers handle = d.begin(proc, '12345', proc_callback, 'test') sys.stdin.readline() d.free()
Comments