【问题标题】:Perpetual tasks in Celery?Celery 中的永久任务?
【发布时间】:2019-12-11 14:53:44
【问题描述】:

我正在构建一个 django 应用程序,在该应用程序中,我使用相机捕捉图像、分析它们、将元数据和分析结果存储在数据库中,最后将数据呈现给用户。

我正在考虑使用 Celery 来处理捕获图像然后处理它们的后台进程:

app = Celery('myapp')

@app.task
def capture_and_process_images(camera):
    while True:
        image = camera.get_image()
        process_image(image)
        sleep(5000)

@app.task
def process_image(image):
    # do some calculations
    # django orm calls
    # etc...

第一个任务将永久运行,而第二个任务大约需要 20 秒,因此将同时处理多个图像。

我没有在网上找到任何以这种方式使用 Celery 的示例,所以我不确定这是否是不好的做法。

Celery 可以/应该用于处理永久运行的任务吗?

谢谢。

【问题讨论】:

    标签: python django multithreading image celery


    【解决方案1】:

    在 Celery 中运行永久任务是在实践中完成的。看看daemonization,它本质上是在没有用户交互的情况下运行一个永久任务,所以我不会说在你的情况下永久运行它有什么问题。

    【讨论】:

      【解决方案2】:

      让 celery 任务无限运行对我来说似乎不是一个好主意。
      如果您打算每隔一段时间捕获图像,我建议您使用一些类似 cron 的脚本每 5 秒获取一次图像并启动 celery 任务来处理它。
      另请注意,在 celery 中避免同步子任务是一种最佳做法,请参阅docs 了解更多详细信息。

      【讨论】:

      • 好的,谢谢你的提示。我只是将同步任务更改为异步。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-29
      • 2018-01-11
      • 2020-04-01
      • 1970-01-01
      相关资源
      最近更新 更多