celery.py 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. # coding=utf-8
  2. """
  3. @project: MaxKB
  4. @Author:虎
  5. @file: celery.py
  6. @date:2024/8/19 11:57
  7. @desc:
  8. """
  9. import os
  10. import subprocess
  11. from django.core.management.base import BaseCommand
  12. from maxkb.const import BASE_DIR
  13. class Command(BaseCommand):
  14. help = 'celery'
  15. def add_arguments(self, parser):
  16. parser.add_argument(
  17. 'service', nargs='+', type=str, choices=("celery", "model"), help='Service',
  18. )
  19. def handle(self, *args, **options):
  20. service = options.get('service')
  21. os.environ.setdefault('CELERY_NAME', ','.join(service))
  22. server_hostname = os.environ.get("SERVER_HOSTNAME")
  23. if hasattr(os, 'getuid') and os.getuid() == 0:
  24. os.environ.setdefault('C_FORCE_ROOT', '1')
  25. if not server_hostname:
  26. server_hostname = '%h'
  27. cmd = [
  28. 'celery',
  29. '-A', 'ops',
  30. 'worker',
  31. '-P', 'threads',
  32. '-l', 'info',
  33. '-c', '10',
  34. '-Q', ','.join(service),
  35. '--heartbeat-interval', '10',
  36. '-n', f'{",".join(service)}@{server_hostname}',
  37. '--without-mingle',
  38. ]
  39. kwargs = {'cwd': BASE_DIR}
  40. subprocess.run(cmd, **kwargs)