根据许多关于Python中全局变量修改的帖子,我使用了全局关键字。但是,在find_new()中,我只能成功解析来自全局的结果,但我无法将其值更改为全局。代码中的打印结果永远不会具有相同的值。所有其他全局声明变量都发生了同样的事情。我尝试每隔5秒监视一个目录下的文件更改,并将更改作为列表反映到全局,以便我可以将其用于其他进程。有什么方法可以解决这个问题吗?
我的代码:
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 :(得分:0)
如果我理解正确,那么您将启动两个独立的流程,并希望在流程之间共享全局变量。
这根本行不通。如果没有明确的通信机制,这两个进程就无法共享数据。