2017-06-27 4 views
0

Nach vielen anderen Posts über die Änderung der globalen Variable in Python verwendete ich globale Schlüsselwort. In find_new() kann ich das Ergebnis von global nur erfolgreich analysieren, aber ich kann seinen Wert nicht auf global ändern. Das Druckergebnis im Code hat niemals den gleichen Wert. Dasselbe ist mit allen anderen globalen Deklarationsvariablen passiert. Ich habe versucht, die Änderung der Datei in einem Verzeichnis alle 5 Sekunden zu überwachen und die Änderung als eine Liste zu den globalen widerspiegeln, so dass ich es für andere Prozesse verwenden kann. Irgendeine Möglichkeit, das zu beheben?Python: Globale Variable kann nur geparst, aber nicht aktualisiert werden

Mein Code:

from os import listdir 
from os.path import isfile, join 
from multiprocessing import Process 
from threading import Thread 

import os 
import time 

def find_new(): 
    global result 
    global new_in 
    while(1): 
     result_next = [os.path.join(dp, f) for dp, dn, filenames in os.walk(mypath) for f in filenames] 
     new_in.extend([x for x in result_next if x not in result]) 
     result = result_next 
     print result 
     time.sleep(5) 
.... 

if __name__== '__main__': 
    #mypath = "/bj_truenas/bbr_rsync/us2bj" 
    mypath = "/home/shiweizhou/proj0.1/Source" 
    result = [os.path.join(dp, f) for dp, dn, filenames in os.walk(mypath) for f in filenames] 
    new_in=[] 
    print "before concurrency" 
    Process(target=find_new).start() 
    Process(target=check_exist).start() 
    print "after concurrency" 
    while(1): 
     print result 
    time.sleep(5) 
+0

Sie haben verschiedene Prozesse, die keinen Status freigeben. –

+0

Prozesse haben keinen Zugriff auf die Variablen des jeweils anderen Benutzers. Sie bekommen unabhängige Kopien und manchmal nicht einmal das. (Die API ahmt 'threading' so genau nach, und die Dokumente machen fast nichts, um die entscheidenden Unterschiede zu erklären, so dass Leute immer wieder in diese Falle geführt werden.) – user2357112

+0

Thx für den obigen Kommentar. Threading perfekt löst dieses Problem und globale Variable kann geteilt werden. –

Antwort

0

Wenn ich richtig verstehe, Sie fangen an zwei getrennten Prozessen und in der Hoffnung globale Variablen zwischen den Prozessen zu teilen.

Das wird einfach nicht funktionieren. Die beiden Prozesse können keine Daten ohne einen expliziten Kommunikationsmechanismus zwischen ihnen teilen.

Verwandte Themen