Si un script python est en cours d’exécution (avec l’interface graphique complète de Tkinter et tout le reste) et que je souhaite transmettre les données en direct qu’il recueille (stockées de manière interne dans des tableaux, etc.), quel serait le meilleur moyen de le faire?
Je ne peux pas simplement importer le script A dans le script B car cela créera une nouvelle instance du script A plutôt que d'accéder à des variables du script A en cours d'exécution.
La seule façon de le faire consiste à écrire le script A dans un fichier, puis le script B extrait les données du fichier. Ceci est cependant loin d’être idéal, étant donné que quelque chose de grave risque de se produire si le script B tente de lire un fichier que le script A écrit déjà. Par ailleurs, je recherche une vitesse de communication beaucoup plus rapide entre les deux programmes.
EDIT: Voici les exemples demandés. Je sais pourquoi cela ne fonctionne pas, mais c'est la prémisse de base de ce qui doit être réalisé. Mon code source est très long et malheureusement confidentiel, il ne va donc pas aider ici. En résumé, le script A exécute Tkinter et collecte des données, tandis que le script B représente views.py dans le cadre de Django, mais j'espère que cela pourra être réalisé dans le cadre de Python.
Script A
import time
i = 0
def return_data():
return i
if __== "__main__":
while True:
i = i + 1
print i
time.sleep(.01)
Script B
import time
from scriptA import return_data
if __== '__main__':
while True:
print return_data() # from script A
time.sleep(1)
vous pouvez utiliser le module multiprocessing
pour implémenter une Pipe
entre les deux modules. Ensuite, vous pouvez démarrer l'un des modules en tant que processus et utiliser le tuyau pour communiquer avec lui. La meilleure partie de l’utilisation des pipes est que vous pouvez également faire passer des objets python tels que dict, list.
Ex: Mp2.py:
from multiprocessing import Process,Queue,Pipe
from mp1 import f
if __== '__main__':
parent_conn,child_conn = Pipe()
p = Process(target=f, args=(child_conn,))
p.start()
print(parent_conn.recv()) # prints "Hello"
mp1.py:
from multiprocessing import Process,Pipe
def f(child_conn):
msg = "Hello"
child_conn.send(msg)
child_conn.close()
Vous pouvez utiliser le module de décapage pour transmettre des données entre deux programmes python.
import pickle
def storeData():
# initializing data to be stored in db
employee1 = {'key' : 'Engineer', 'name' : 'Harrison',
'age' : 21, 'pay' : 40000}
employee2 = {'key' : 'LeadDeveloper', 'name' : 'Jack',
'age' : 50, 'pay' : 50000}
# database
db = {}
db['employee1'] = employee1
db['employee2'] = employee2
# Its important to use binary mode
dbfile = open('examplePickle', 'ab')
# source, destination
pickle.dump(db, dbfile)
dbfile.close()
def loadData():
# for reading also binary mode is important
dbfile = open('examplePickle', 'rb')
db = pickle.load(dbfile)
for keys in db:
print(keys, '=>', db[keys])
dbfile.close()