如何将值从同时运行的子脚本传递给父脚本?
在Python中,如何提前将一个值返回给调用进程?
你好,我想问有没有办法让一个脚本调用另一个脚本,让这两个脚本同时运行,并且让子脚本在完成之前就把一个值发送给父脚本(而不提前结束子脚本)?我在找Python方面的解决方案,但任何信息或线索都很有帮助,谢谢。
我觉得一种方法是把想要发送回父脚本的值打印到标准输出,然后让父脚本以某种方式重定向或获取这个值,但这肯定不是最好的解决办法,因为如果子脚本还打印了其他内容怎么办?(那样的话,父脚本就得知道怎么用类似Unix的head和tail命令来提取准确的输出部分,如果你根本不想使用标准输出呢?)
我搜索过这个问题,但找不到任何答案。
2 个回答
1
最好使用multiprocessing模块,这个模块就是为了这个目的而设计的。
4
你可以使用 multiprocessing 模块来从父脚本启动子脚本。可以用 mp.Queue 来把子脚本的输出传回父脚本。下面是一个简单的例子:
parent.py:
import multiprocessing as mp
import child
if __name__ == '__main__':
queue = mp.Queue()
proc = mp.Process(target=child.main, args=(queue,))
proc.daemon = True
# This launches the child process, calling child.main()
proc.start()
for i in range(10):
result = queue.get() # Get results from child.main
print(result)
child.py:
import time
def main(queue=None):
for i in range(10):
# do a computation
result = i
if queue:
# Put a result in the queue for the parent to get
queue.put(result)
time.sleep(.5)
if __name__=='__main__':
# We reach here only when child.py is run as a script
# (as opposed to child being imported as a module).
main()
需要注意的是,通过 queue
传递的 result
必须是可以被序列化的,也就是说它必须能够被转换成一种可以存储或传输的格式。