¿Existe una noción genérica de programación asincrónica en python? ¿Podría asignar una devolución de llamada a una función, ejecutarla y volver al flujo principal del programa inmediatamente, sin importar cuánto tiempo demore la ejecución de esa función?programación asincrónica en python
Respuesta
Echa un vistazo aquí:
Asynchronous Programming in Python
An Introduction to Asynchronous Programming and Twisted
Merece la pena echar un vistazo a:
asyncio (previously Tulip) has been checked into the Python default branch
Eso no es realmente una respuesta. –
es muy posible que quieres descargar el trenzado biblioteca para Python. Proporcionan muchas herramientas útiles.
Lo que usted describe (el flujo principal del programa de reanudar de inmediato, mientras que otra función ejecuta) no es lo que normalmente se llama "asíncrono" programación (También conocido como "eventos"), sino más bien "multitarea" (AKA "multihilo" o "multiproceso"). Puede obtener lo que describió con los módulos de biblioteca estándar threading
y multiprocessing
(este último permite la ejecución simultánea real en máquinas de múltiples núcleos).
asíncrono de programación (event-driven) se apoya en la biblioteca estándar de Python en los módulos asyncore
y asynchat
, que están muy orientadas a tareas de red (de hecho se utilizan internamente el módulo select
, que, en Windows, sólo es compatible con tomas - - aunque en sistemas operativos Unixy también puede admitir cualquier descriptor de archivo).
Para una más general (aunque también sobre todo la creación de redes orientada, pero no limitado a que) el apoyo a la programación asíncrona (event-driven), revisar el paquete de twisted de terceros.
+1, nadie más se dio cuenta de que estaba pensando en enhebrar/bifurcar. –
Los otros encuestados te están señalando Twisted, que es un marco excelente y muy completo pero, en mi opinión, tiene un diseño muy antiponético. Además, AFAICT, tiene que usar el bucle principal retorcido, que puede ser un problema para usted si ya está utilizando otra cosa que proporciona su propio bucle.
Aquí está un ejemplo artificioso que demostrara mediante el módulo 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
Sin embargo, en casi todos los casos de utilidad, tendrá que comunicarse entre hilos. Debería consultar synchronization primitives y familiarizarse con el concepto de concurrency y los problemas relacionados.
El módulo threading
proporciona muchas de estas primitivas para que las use, si sabe cómo usarlas.
Si bien el multiprocesamiento (y el multihilo) es útil, eso no significa que sea una solución para todo, ni tampoco significa que sea siempre un buen sustituto para la programación basada en eventos que utiliza un ciclo principal. –
Es posible que vea mi herramienta de programación Python asíncrono: 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()
Buenas noticias todos!
Python 3.4 incluiría la nueva y ambiciosa programación asincrónica implementation!
Actualmente se llama tulip y ya tiene un active following.
Como se describe en PEP 3153: Asynchronous IO support y PEP 3156: Asynchronous IO Support Rebooted:
Las personas que quieren escribir código asíncrono en Python en este momento tiene algunas opciones:
- asyncore y asynchat;
- algo a medida, muy probablemente basado en el módulo de selección;
- usando una biblioteca de terceros, como Twisted o gevent.
Desafortunadamente, cada una de estas opciones tiene sus desventajas, que esta PEP intenta abordar.
A pesar de haber sido parte de la biblioteca estándar de Python durante mucho tiempo, el módulo asyncore adolece de defectos fundamentales derivados de una API inflexible que no resiste las expectativas de un módulo de red asíncrono moderno.
Además, su enfoque es demasiado simplista para proporcionar a los desarrolladores todas las herramientas que necesitan para explotar al máximo el potencial de las redes asincrónicas.
La solución más popular en este momento utilizada en la producción implica el uso de bibliotecas de terceros. A menudo, estas soluciones proporcionan soluciones satisfactorias, pero existe una falta de compatibilidad entre estas bibliotecas, lo que tiende a hacer que las bases de código estén estrechamente relacionadas con la biblioteca que utilizan.
Esta falta actual de portabilidad entre diferentes bibliotecas IO asíncronas causa un gran esfuerzo duplicado para los desarrolladores de biblioteca de terceros. Una abstracción lo suficientemente poderosa podría significar que el código asincrónico se escribe una vez, pero se usa en todas partes.
Aquí está el brief overview de sus capacidades.
Suena loco que alguien realmente quiera implementar una forma útil de hacer programación asíncrona en Python. –
@ PavelŠimerda: ¿por qué? – MestreLion
@MestreLion: esta área ha sido ignorada durante tanto tiempo. –
- 1. Programación asincrónica en Python Twisted
- 2. Mejores prácticas de programación asincrónica
- 3. ¿Cómo uso la programación asincrónica en Perl?
- 4. Programación asincrónica en javascript (NO AJAX)
- 5. Código de ejemplo para programación asincrónica en C
- 6. Programación asincrónica en JavaScript sin devoluciones de llamada desordenadas
- 7. ¿Cómo funciona la programación asincrónica en un modelo de programación con un solo hilo?
- 8. programación lineal en python?
- 9. Programación Relacional/Lógica en Python?
- 10. Programación con hardware en python
- 11. Python: descarga asincrónica simple del contenido de la url
- 12. Programación web Python
- 13. Descarga asincrónica "regulada" en F #
- 14. asincrónica llama rizo interior
- 15. Delegados de multidifusión asincrónica
- 16. serialización de protobuf asincrónica
- 17. SqlDataAdapter.Fill - Aproximación asincrónica
- 18. Devolución de llamada asincrónica
- 19. System.Data.IDbCommand y ejecución asincrónica?
- 20. Web Security API de programación en Python
- 21. Programación concurrente muy simple en Python
- 22. mejor entorno de programación Python en Linux
- 23. Programación paralela con coroutines en Python
- 24. Programación funcional en Python y C++
- 25. cambio de programación en Python eficiente
- 26. ¿Programación estructurada y generadores Python?
- 27. ¿Es esta una buena manera de implementar el Modelo de programación asincrónica?
- 28. Sincronización de una llamada asincrónica en C#
- 29. Resolución de dirección asincrónica en winsock?
- 30. Invocación asincrónica: ¿se requiere EndInvoke?
relacionados http://nichol.as/asynchronous-servers-in-python – jfs
Hay bastante novedades [nuevos desarrollos en el campo] (http://stackoverflow.com/questions/3221314/asynchronous-programming-in- python/18099524 # answer-18099524). –