如何定期返回python函数的标准输出?

如何定期返回python函数的标准输出?,python,Python,我正在从一个主函数mainFunc调用多个函数(使用flask模块将其公开为Restful服务)。执行可能需要几分钟到一小时才能完成,要求每30秒显示一次进度(调用的函数的输出)。由于Rest API调用是从另一个程序调用mainFunc(),因此它应该在每次调用时返回输出(即当前状态) 我根据尝试了yield和StringIO,但无法使其工作,stdout仅在完成所有任务时返回,而不是在两者之间返回。请建议是否可以这样做 mainFunc(): runs_for_5_mins()

我正在从一个主函数mainFunc调用多个函数(使用flask模块将其公开为Restful服务)。执行可能需要几分钟到一小时才能完成,要求每30秒显示一次进度(调用的函数的输出)。由于Rest API调用是从另一个程序调用mainFunc(),因此它应该在每次调用时返回输出(即当前状态)

我根据尝试了yield和StringIO,但无法使其工作,stdout仅在完成所有任务时返回,而不是在两者之间返回。请建议是否可以这样做

mainFunc():
    runs_for_5_mins()
    runs_for_30_mins()  
    ...
    return output

当然可以做到。问题只是它应该有多复杂;-)

进度输出的最佳方法是调整长时间运行的例程,以便它自己进行输出。例行程序是信息存在的地方,已经完成了多少,还有多少还在前面,因此没有人能像例行程序本身那样精确。可以为例程指定一个特殊的
(例如打开的文件句柄),以将进度信息放入其中。然后,作为调用者,您只需传递
sys.stderr
或类似消息即可

但如果你不愿意或无法改变你的日常生活,那么让我们面对现实:你想同时做两件事:

  • mainFunc()
    函数和
  • 进展情况与产出有关
  • 为了在一个进程内并行执行任务,您使用线程。所以

  • 启动进度线程,每30秒打印一次进度输出
  • 开始你的日常生活
  • 完成例程后,向线程发出终止自身的信号

  • 如果这是您想要解决问题的方法,我可以在这里详细介绍。

    谢谢阿尔夫,线程并行方法看起来适合我。我应该使用多处理吗?使用标准模块线程。多处理是针对多个进程的。