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)
Sie haben verschiedene Prozesse, die keinen Status freigeben. –
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
Thx für den obigen Kommentar. Threading perfekt löst dieses Problem und globale Variable kann geteilt werden. –