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

2024-04-18 19:24:34 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我根据How to capture stdout output from a Python function call?尝试了yield和StringIO,但无法使其工作,stdout只在完成所有任务时返回,而不是在两者之间返回。请建议是否可以这样做。你知道吗

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

Tags: 模块函数程序restapirestfulflaskforoutput
1条回答
网友
1楼 · 发布于 2024-04-18 19:24:34

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

进度输出的最佳方法是调整长时间运行的例程,以便它自己执行此输出。例行程序是信息呈现的地方,已经做了多少,还有多少还在后面,所以没有人能像例行程序本身那样精确。一个例程可以被赋予一个特殊的stream(例如一个打开的文件句柄)来将进度信息放入其中。作为调用者,您可以简单地传递sys.stderr或类似的消息。你知道吗

但是如果你不愿意或者不能改变你的习惯,那么让我们面对现实:你想同时做两件事:

  1. mainFunc()函数调用例程
  2. 进度输出。你知道吗

对于在一个进程内并行执行任务,您使用线程。所以呢

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

如果你想用这种方法解决你的问题,我可以在这里详述。你知道吗

相关问题 更多 >