Python脚本之间传递数据,而单独运行
如果我有一个python脚本运行(全文Tkinter的GUI和一切),我想通过它收集实时数据(存储在内部阵列和这样的)到另一个python脚本,这样做的最好方法是什么?Python脚本之间传递数据,而单独运行
我不能简单地导入剧本一到脚本B,因为它会创建脚本A的新实例,而不是在已经运行的脚本A.
我觉得这样做是唯一的方式访问任何变量通过让脚本A写入文件,然后脚本B从文件中获取数据。这是不太理想但仿佛脚本B试图读取文件的脚本A在已经写会出事。我又找了更快的速度向两个程序之间的通信。
编辑: 这里是要求的例子。我知道为什么,这并不工作,但它是需要达到什么样的基本前提。我的源代码很长,不幸的是保密,所以它不会在这里帮助。总之,一个脚本运行的Tkinter和收集数据,而脚本B是views.py作为Django的一部分,但我希望可以做到这一点像Python的一部分。
脚本A
import time
i = 0
def return_data():
return i
if __name__ == "__main__":
while True:
i = i + 1
print i
time.sleep(.01)
脚本B
import time
from scriptA import return_data
if __name__ == '__main__':
while True:
print return_data() # from script A
time.sleep(1)
可以使用multiprocessing
模块来实现在两个模块之间的Pipe
。然后,您可以启动其中一个模块作为Process,并使用Pipe与其通信。关于使用管道的最好的部分是你也可以传递像dict,list这样的python对象。
例如: mp2.py:
from multiprocessing import Process,Queue,Pipe
from mp1 import f
if __name__ == '__main__':
parent_conn,child_conn = Pipe()
p = Process(target=f, args=(child_conn,))
p.start()
print(parent_conn.recv()) # prints "Hello"
mp1.py:
from multiprocessing import Process,Pipe
def f(child_conn):
msg = "Hello"
child_conn.send(msg)
child_conn.close()
这似乎是要走的路,但为什么以下工作不成功?如果将此代码添加到mp1.py的末尾:'I = 0 DEF克(): 打印我 如果__name__ == “__main__”: 而真: I = I + 1 克( ) '为什么不运行mp2.py返回当前的i? –
没有完全理解你的问题。但是如果你想调用函数g(),你需要在'p = Process(target = g,args =(child_conn,))中指定它' –
查看编辑中的例子,如果你插入你的代码,mp2将返回0而不是我在mp1中的任何内容。 –
您应该能够导入一个模块到另一实例的单个实例(如果有必要使用单),然后将属性/值分配给此实例,以便您可以根据需要在辅助脚本中读取它。 – JacobIRR
如果脚本不是太长或敏感的,这将有助于看到源代码 – JacobIRR
也许你可以使用文件插座?这似乎是流式传输数据的一种选择。 – Evert