Variables globales de Python en múltiples archivos

Tengo 2 daemons, que deberían acceder a la misma Variable. He creado un tercer archivo para variables globales y cada daemon puede acceder a la variable. Pero cuando uno cambia la variable, el otro todavía ve el valor predeterminado.

ejemplo:

glob.py

time = 0 

daemon a:

 import datetime import time import glob while(True): glob.time = datetime.datetime.now() time.sleep(30) 

daemon b:

 import glob while(True): print(glob.time) 

se imprimiría 0 cada vez que espero que haya aclarado mi problema y que alguien pueda ayudarme. Si necesita más información, no dude en preguntar.

Parece que (aunque no lo digas explícitamente) estás ejecutando tus progtwigs de una manera completamente independiente: dos invocaciones diferentes del intérprete de Python.

No existe la magia que usted espera que exista: como si tuviera dos instancias del mismo progtwig en ejecución, cada una tendrá su instancia de variables (global o de otro tipo).

Si está realizando una tarea sencilla, la forma más fácil de hacerlo es tener un archivo de texto como salida para cada proceso, y el otro proceso que intenta leer la información del archivo generado por cada proceso que desea conocer (incluso podría utilizar tuberías con nombre en Unixes).

La otra forma es tener una secuencia de comandos de Python para coordinar el inicio de tus demonios utilizando el módulo estándar de multiprocessing , y luego crear un objeto de multiprocesamiento.Manager para compartir variables directamente entre procesos. Esto puede ser más complicado de configurar al principio, pero es lo más limpio que se puede hacer. Consulte los documentos en la clase de Manager aquí: https://docs.python.org/3/library/multiprocessing.html

¿Cómo comparto variables globales a través de módulos?

La forma canónica de compartir información a través de módulos dentro de un solo progtwig es crear un módulo especial (a menudo llamado config o cfg). Solo importa el módulo de configuración en todos los módulos de tu aplicación; el módulo entonces estará disponible como un nombre global. Debido a que solo hay una instancia de cada módulo, los cambios realizados en el objeto del módulo se reflejan en todas partes:

 import time import glb while(True): glb.t += 1 time.sleep(3) print glb.t 

b.py:

 import glb import a while(True): print(glb.t) 

glb.py:

 t = 0 

Salida después de iniciar a.py:

 python b.py 1 2 3 4 5 6