2017-09-05 1 views
0

J'écris du code que j'ai enfilé, et j'utilise différentes fonctions à la fois. J'ai une variable appelée ref qui est différente pour chaque thread.Python partage des variables entre les fonctions mais pas les threads

ref est défini dans une fonction au sein de la fonction threadées, lors de l'utilisation ref globale, tous les fils utilisent la même valeur pour ref (que je ne veux pas). Cependant, lorsque je n'utilise pas le ref global, les autres fonctions ne peuvent pas utiliser ref car elle n'est pas définie.

.: par exemple

def threadedfunction(): 
    def getref(): 
     ref = [get some value of ref] 
    getref() 
    def useref(): 
     print(ref) 
    useref() 
threadedfunction() 
+0

Avez-vous entendu parler d'arguments et de valeurs de retour? Vous devriez les utiliser pour communiquer des données dans et hors des fonctions. – user2357112

+1

C'est quelque chose dont vous avez besoin d'être à 100% à l'aise avant même d'envisager de faire quelque chose de multithread. – user2357112

+0

Si vous écrivez entre les threads, vous devez également utiliser des types threadsafe. Les types internes de Python ne sont pas garantis sûrs. –

Répondre

0

Si la définition ref comme global ne correspond pas à vos besoins, alors vous n'avez pas beaucoup d'autres options ...

Modifier les paramètres de votre fonction et les retours. Solution possible:

def threadedfunction(): 

    def getref(): 
     ref = "Hello, World!" 
     return ref # Return the value of ref, so the rest of the world can know it 

    def useref(ref): 
     print(ref) # Print the parameter ref, whatever it is. 

    ref = getref() # Put in variable ref whatever function getref() returns 
    useref(ref) # Call function useref() with ref's value as parameter 

threadedfunction() 
+0

Merci beaucoup homme –