我们使用 django、rabbitmq、celery 和 ffmpeg 的组合来读取相机流并将其分解为图像以存储到文件系统中。此设置可 24x7 运行。现在,对于每个摄像头流,我们正在创建一个单独的任务,理论上每个任务都会无限期运行。
如果流发生故障,我们等待 n 个帧,创建一个异常,并在异常处理程序中,使用 time.sleep 创建 1 分钟的延迟后,我们重新运行 ffmpeg 进程。
我的问题是, 这是正确的做法吗? 我们应该使用 celery 来读取流吗? celery 是完成此任务的正确工具吗? 我们可以使用 time.sleep 在 celery 任务中创建延迟吗?会影响其他任务吗?
我们有相对较大的 Celery 集群,许多任务运行几个小时,有些甚至运行超过 24 小时,所以我想说,是的,Celery 是长时间运行任务的不错选择。我对音频/视频处理知之甚少,所以我认为在 Celery 任务中执行它应该不会有任何问题。我可能会改变最初想法的唯一事情如下:我不会睡眠(是的,你可以在 Celery 任务中调用睡眠)并继续处理,而是运行一个新任务。其他任务根本不应该受到影响。
不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,