我从一个主函数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
当然可以。问题只是它应该有多复杂;-)
进度输出的最佳方法是调整长时间运行的例程,以便它自己执行此输出。例行程序是信息呈现的地方,已经做了多少,还有多少还在后面,所以没有人能像例行程序本身那样精确。一个例程可以被赋予一个特殊的
stream
(例如一个打开的文件句柄)来将进度信息放入其中。作为调用者,您可以简单地传递sys.stderr
或类似的消息。你知道吗但是如果你不愿意或者不能改变你的习惯,那么让我们面对现实:你想同时做两件事:
mainFunc()
函数调用例程对于在一个进程内并行执行任务,您使用线程。所以呢
如果你想用这种方法解决你的问题,我可以在这里详述。你知道吗
相关问题 更多 >
编程相关推荐