运行状况检查的长时间任务

2024-06-09 16:18:22 发布

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

我目前正在实现一个容器化python应用程序来处理队列中的消息

主进程将每n秒轮询一次队列,然后处理它收到的所有消息。但是,我也希望这个应用程序公开一个带有健康检查和其他端点的API,这些端点可以将作业发送到主进程

我想知道python中有哪些标准库可以做到这一点,如果有的话。我见过一些在FastAPI上使用后台任务的例子,但这不符合我的要求,因为服务应该在启动时轮询队列,而不向其端点发出任何请求

我也看过上面提到的芹菜库,但它似乎比我所需要的要复杂得多

有没有一种简单的方法可以让FastAPI应用程序与长时间运行的进程“并排”运行,并且两者都可以通信


Tags: 方法api应用程序消息标准队列进程作业
2条回答

多处理模块有自己的队列版本。在调用程序中,首先创建一个队列,如下所示:

import multiprocessing as mp
self.outq_log=mp.Queue()

然后,在调用mp.process()以启动长时间运行的任务时,通过将此队列对象放入参数中,将其传递给流程

然后,调用程序中检查队列中消息的函数如下所示:

def service_queues(self):
  #look for data from the process, print it in the windows
  try:
    if self.outq_log is not None:
      x=self.outq_log.get(block=False)
      self.logtxt.write(x)
  except queue.Empty:
    pass

最后,在长时间运行的流程中,您可以使用

outq_log.put(stuff)

如果希望以另一种方式将消息从调用者发送到任务,则可以创建一个单独的队列,并在调用者中执行“put”ting,在任务中执行“get”ting

在线程中启动其他任务或使用asyncio后,可以像this示例中那样以编程方式运行FastAPI。通过这种方式,您应该能够从服务器端点与之前启动的任何对象进行通信

相关问题 更多 >