我正在构建一个 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 可以/应该用来处理永久运行的任务吗?
谢谢你。
在 Celery 中运行永久任务是在实践中完成的。看一下 daemonization,它本质上运行一个永久任务,无需用户交互,所以我不会说在你的情况下永久运行它有什么问题。
让 celery 任务无限运行对我来说似乎不是一个好主意。
如果您要以一定的时间间隔捕获图像,我建议您使用一些类似 cron 的脚本,每 5 秒获取一个图像并启动 celery 任务来处理它。
另请注意,最佳实践是避免 celery 中的同步子任务,请参阅 docs 了解更多详细信息。