Python多处理 - 变量未更新

时间:2017-01-18 22:57:05

标签: python multiprocessing

嘿我有一个关于python模块用于多处理及其与变量交互的问题

从本质上讲,我的代码在更新某个变量时遇到了问题 - 即使我看到它已被更新(?)

代码本身相对简单 - 我想查看添加到文件中的任何新行(将是日志),然后将每行写入数据结构。

我的问题是,由于某些原因,我的log_array列表在此末尾仍为空,即使我已将其打印在generate_new_log函数中,我可以看到它已被填充。

temp_log = open("temp_log.txt", 'w')
log_array = []

def follow(thefile):
    thefile.seek(0,2)
    while True:
        line = thefile.readline()
        if not line:
            time.sleep(0.1)
            continue
        yield line

def generate_new_log():
    logfile = open("test2.txt","r")
    loglines = follow(logfile)
    for line in loglines:
        #global log_array
        global log_array 
        log_array.append(line)
        print log_array

def main():

    p = multiprocessing.Process(target=generate_new_log, name='NewLog', args = ())
    p.start()
    time.sleep(10)
    print log_array
    p.terminate()
    print("hi")
    p.join()
    print log_array


if __name__ == '__main__':
    main()

控制台输出如下所示:

['duck\n']
['duck\n', 's\n']
['duck\n', 's\n', '\n']
['duck\n', 's\n', '\n', 'bbbb\n']
['duck\n', 's\n', '\n', 'bbbb\n', 'cccc\n']
['duck\n', 's\n', '\n', 'bbbb\n', 'cccc\n', 'cerap\n']
['duck\n', 's\n', '\n', 'bbbb\n', 'cccc\n', 'cerap\n', 'nerds\n']
['duck\n', 's\n', '\n', 'bbbb\n', 'cccc\n', 'cerap\n', 'nerds\n', 'duck\n']
['duck\n', 's\n', '\n', 'bbbb\n', 'cccc\n', 'cerap\n', 'nerds\n', 'duck\n',
'pony\n']
[]
hi
[]

问题主要在于控制台底部的那两个空列表引用的log_array就像全局变量。我可以看到,当我们通过generate_new_log函数时,我可以看到log_array正在更新。我的主要问题是 - 如何/在哪里可以从10秒间隔后填充的log_array中提取信息?

0 个答案:

没有答案