0

Voici le code qui illustre le problème. S'il vous plaît noter que ce n'est qu'un exemple, j'utilise la même logique dans une application plus compliquée, où je ne peux pas utiliser le sommeil comme la quantité de temps, il faudra pour processus1 pour modifier la variable, dépend de la vitesse de la connexion internet.Comment modifier une variable dans un thread et le vérifier dans un autre?

from multiprocessing import Process 

code = False 

def func(): 
    global code 
    code = True 

pro = Process(target=func) 
pro.start() 

while code == False: 
    pass 

pro.terminate() 
pro.join() 

print('Done!') 

En cours d'exécution, rien n'apparaît à l'écran. Lorsque je termine le programme, en appuyant sur CTRL-C, la trace de la pile montre que la boucle while était en cours d'exécution.

+4

Les processus ne sont pas des threads. Ce processus définit sa propre variable globale indépendante. Si vous voulez communiquer entre les processus 'multiprocessing', utilisez les outils' multiprocessing' fournis et les documents. – user2357112

+0

@ user2357112 Cette question peut-elle être marquée comme doublon pour: [Variable partagée dans le multitraitement de python] (http://stackoverflow.com/questions/17377426/shared-variable-in-pythons-multiprocessing)? J'ai besoin d'un deuxième avis –

+0

@ user2357112 Pouvez-vous s'il vous plaît donner un exemple de code? –

Répondre

1

Python a quelques bibliothèques de simultanéité: threading, multiprocessing et asyncio (et plus).

multiprocessing est une bibliothèque qui utilise des sous-processus pour contourner l'incapacité de python à exécuter simultanément des tâches gourmandes en ressources processeur. Pour partager des variables entre différents types, créez-les via une instance multiprocessing.Manager(). Par exemple:

import multiprocessing 

import time 


def func(event): 
    print("> func()") 
    time.sleep(1) 
    print("setting event") 
    event.set() 
    time.sleep(1) 
    print("< func()") 


def main(): 
    print("In main()") 

    manager = multiprocessing.Manager() 
    event = manager.Event() 
    p = multiprocessing.Process(target=func, args=(event,)) 
    p.start() 

    while not event.is_set(): 
     print("waiting...") 
     time.sleep(0.2) 

    print("OK! joining func()...") 
    p.join() 

    print('Done!') 


if __name__ == "__main__": 
    main()