【发布时间】:2016-07-12 14:23:51
【问题描述】:
我有一个将数据写入文本文件的函数,第二个函数从同一个文本文件中提取数据并显示图表。我想在第一个函数启动后几秒钟启动第二个函数,并一起运行直到两者都完成。通过这种方式,我可以获得实时图表。我在下面编写的代码同时启动了这两个函数,但第二个函数看不到任何文本文件。我需要为第二个函数延迟一些时间,以便给第一个函数创建文本文件的时间。
但是,因为第二个函数(live_graph)不仅需要从文本文件中提取数据,还需要从第一个函数中获取一些参数(例如图表的标题),我不确定这是否是正确的继续方式,似乎不可能从另一个函数中获取“密钥”;我得到“未定义密钥”。也许我还必须将参数写入文本文件?
from multiprocessing import Process
import time
def writing():
numentries = 0
for text in get_all(newlista, "sentence", "text"):
if text.lower().startswith( key.lower().split(None, 1)[0] ):
pass
elif len(text) > 500:
pass
elif len(text) < 80:
pass
else:
on_data(text)
numentries += 1
def live_graph():
#pull data from text.txt
time.sleep(5)
if __name__=='__main__':
p1 = Process(target = writing)
p1.start()
p2 = Process(target = live_graph)
p2.start()
【问题讨论】:
-
为什么不以一种在文本文件可用之前阻塞的方式实现第二个?
-
怎么样?然后我就可以从第一个函数中提取参数?
-
我已经用 time.sleep 更新了原始代码,它似乎可以工作。另外,我已经从第一个函数中运行了参数,现在我可以在第二个函数中使用它们。一个问题:在 python 网站上,我读到“实际暂停时间可能少于请求的时间,因为任何捕获的信号都会在执行该信号的捕获例程后终止 sleep()”,这意味着我可以安全行事,例如 15 secs cos' 一旦第一个函数生成了文本文件,第二个函数就会启动吗?
-
在进程之间使用信号量,比如
multiprocessing.Queue是处理这个问题的更明智的方法
标签: python-3.x matplotlib multiprocessing