私は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
実際に存在する場所にのみ関連しており、同時に複数のノードに存在する可能性は低いです。
特定のタスクがローカルでのみ実行されるように指定する方法はありますか?