我正在努力实现基于Flask + Celery的体系结构来处理图像。参见下图:
Celery客户端(生产者)是一个烧瓶应用程序,它将接收要处理的图像并将其推送到RabbitMQ中,以供芹菜工作者使用。
系统可以根据需求自动启动和停止新的工作程序节点。每个celery worker节点都将运行多个线程(--concurrency参数)。
我正在考虑从默认的celery队列中使用一个线程。那么任何节点都有资格处理图像。
一旦给定节点从队列中获取/使用该图像,该图像将被本地放置在内存数据库中。
在处理图像时,我想避免图像通过网络在不同节点之间流动。
图像处理将由许多任务组成,并将使用chain()执行。
因此,一旦我在本地获得了给定的图像,如何强制所有其他子任务(链)始终在同一主机中执行?
我知道我可以创建特定的队列并将这些队列分配给每个节点中的工作程序,但是我不知道这是否是最佳/唯一的解决方案,也不知道该如何动态进行。
最好的问候。 克莱森里奥斯(Kleyson Rios)。