Sí, cada módulo en Python es siempre global, o mejor dicho, un singleton: cuando lo hace from twisted.internet import reactor
, el mecanismo de importación de Python primero comprueba sys.modules['twisted.internet.reactor']
y, si existe, devuelve dicho valor; solo si no existe (es decir, la primera vez que se importa un módulo) es el módulo realmente cargado por primera vez (y guardado en una entrada en sys.modules
para posibles importaciones futuras).
No hay nada especialmente mágico en el patrón de diseño de Singleton, aunque a veces puede resultar limitante cuando se necesitan desesperadamente más de una de esas cosas para las que la arquitectura ha decretado que "solo puede haber una". Trenzado de docs reconocen que:
nuevo código de aplicación debe preferir pase y aceptar el reactor como un parámetro donde más se necesita, en lugar de depender de su capacidad para importar este módulo para obtener una referencia. Este simplifica las pruebas unitarias y puede hacer que sea más fácil admitir un día múltiples reactores (como una mejora de rendimiento ), aunque actualmente no es posible.
La mejor manera para que sea posible, si es crucial para su aplicación, es contribuir al proyecto trenzado, ya sea de trabajo (que codifica los sutiles mecanismos necesarios para dar soporte a múltiples reactores, es decir, bucles de eventos múltiples, dentro de una sola aplicación) o fondos (el dinero permitirá mantener a alguien con un estipendio para realizar este trabajo).
De lo contrario, utilice procesos separados (por ejemplo, con el módulo multiprocessing
de la biblioteca estándar) con no más de un reactor cada uno.
¿A qué te refieres con 'aplicación'? ¿Te refieres a procesos de Python separados o a múltiples cosas que se ejecutan en un solo proceso? –