我将 Celery 与 RabbitMQ 一起使用。
对于我的用例,我肯定会有一些实例,其中我将拥有应该在任何给定节点上执行的消息,但是对于一个特定的队列,我只需要在原始服务器上执行的事情。这是因为它适用于仅本地文件:
@celery.task
def calculate_hash(filename):
target = Models.objects.get(filename=filename)
hasher = hashlib.md5()
with open(filename, "rb") as f:
chunk = f.read(64 * 1024)
while len(chunk) > 0:
hasher.update(chunk)
chunk = f.read(64 * 1024)
target.hash = hasher.hexdigest()
target.save()
显然,上面的任务只在filename
实际存在的地方才有意义,它不可能同时存在于多个节点上。
有没有办法指定给定的任务只在本地执行?