如何将值从同时运行的子脚本传递给父脚本?

2 投票
2 回答
1657 浏览
提问于 2025-04-17 00:02

在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 必须是可以被序列化的,也就是说它必须能够被转换成一种可以存储或传输的格式。

撰写回答