-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmanage_celery.py
More file actions
69 lines (50 loc) · 1.96 KB
/
manage_celery.py
File metadata and controls
69 lines (50 loc) · 1.96 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#!/usr/bin/env python
"""
Helper script for managing Celery workers and beat scheduler.
"""
import os
import sys
import subprocess
from pathlib import Path
# Add project directory to Python path
PROJECT_ROOT = Path(__file__).parent
sys.path.insert(0, str(PROJECT_ROOT))
# Set Django settings
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'citis.settings')
def start_worker(queue=None, concurrency=2):
"""Start a Celery worker"""
cmd = ['celery', '-A', 'citis', 'worker', '--loglevel=info', f'--concurrency={concurrency}']
if queue:
cmd.extend(['-Q', queue])
print(f"Starting Celery worker: {' '.join(cmd)}")
subprocess.run(cmd)
def start_beat():
"""Start Celery beat scheduler"""
cmd = ['celery', '-A', 'citis', 'beat', '--loglevel=info', '--scheduler', 'django_celery_beat.schedulers:DatabaseScheduler']
print(f"Starting Celery beat: {' '.join(cmd)}")
subprocess.run(cmd)
def start_flower():
"""Start Flower monitoring"""
cmd = ['celery', '-A', 'citis', 'flower']
print(f"Starting Flower monitoring: {' '.join(cmd)}")
subprocess.run(cmd)
def show_status():
"""Show Celery worker status"""
cmd = ['celery', '-A', 'citis', 'inspect', 'active']
subprocess.run(cmd)
if __name__ == '__main__':
import argparse
parser = argparse.ArgumentParser(description='Manage Celery workers for citis')
parser.add_argument('command', choices=['worker', 'beat', 'flower', 'status'],
help='Command to run')
parser.add_argument('--queue', help='Queue name for worker (archive, assets, analytics)')
parser.add_argument('--concurrency', type=int, default=2, help='Worker concurrency')
args = parser.parse_args()
if args.command == 'worker':
start_worker(args.queue, args.concurrency)
elif args.command == 'beat':
start_beat()
elif args.command == 'flower':
start_flower()
elif args.command == 'status':
show_status()