问题描述
我们正在使用django,rabbitmq,celery和ffmpeg的组合来读取相机流并将其分解为图像以存储到文件系统中。此设置可以24x7全天候工作。现在,对于每个摄像机流,我们正在创建一个单独的任务,并且每个任务在理论上将无限期地运行。
如果流下降,我们等待n个帧,创建一个异常,并在异常处理程序中,使用时间创建1分钟的延迟。sleep之后,我们将重新运行ffmpeg进程。
我的问题是 这是正确的方法吗? 我们应该用芹菜来阅读流吗? 芹菜是用于此任务的正确工具吗? 我们可以使用time.sleep在芹菜任务中创建延迟吗?会影响其他任务吗?
解决方法
我们的Celery集群相对较大,我们的许多任务要运行数小时,有些甚至要运行24小时以上,因此我可以说,Celery是长期运行任务的不错选择。我对音频/视频处理了解得很少,因此我认为在Celery任务中执行此操作不会有任何问题。我可能会更改原始想法的唯一事情如下:我不会睡觉(是的,您可以在Celery任务中调用sleep)并继续处理,但改为运行一个新任务。其他任务完全不会受到影响。