Reputation: 100756
The scenario:
Deployment to production is done with a script that:
How can I enhance the deployment script so it does the following?:
Upvotes: 4
Views: 2549
Reputation: 100756
The following script, run as part of the deployment solved the problem:
import time
from celery.app.control import Control
from myapp.tasks import celery # my application's Celery app
if __name__ == "__main__":
control = Control(celery)
control.cancel_consumer("celery") # queue name, must probably be specified once per queue, but my app uses a single queue
inspect = control.inspect()
while True:
active = inspect.active()
running_jobs = []
for key, value in active.items():
running_jobs.extend(value)
if len(running_jobs) > 0:
print("{} jobs running: {}".format(len(running_jobs), ", ".join(job["name"] for job in running_jobs)))
time.sleep(10)
else:
print("No running jobs")
break
Upvotes: 7