嘿我有一个关于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中提取信息?