Celery 中的永久任务?

问题描述 投票:0回答:2

我正在构建一个 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
2个回答
1
投票

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.