Bläddra i källkod

celeryev did not create pidfile

Ask Solem 14 år sedan
förälder
incheckning
4d4a66d63d
3 ändrade filer med 14 tillägg och 4 borttagningar
  1. 3 0
      Changelog
  2. 2 2
      celery/bin/celeryev.py
  3. 9 2
      celery/events/snapshot.py

+ 3 - 0
Changelog

@@ -32,6 +32,9 @@ Fixes
 * Routing Userguide: Fixes typo, routers in :setting:`CELERY_ROUTES` must be
   instances, not classes.
 
+* :program:`celeryev` did not create pidfile even though the
+  :option:`--pidfile` argument was set.
+
 * Task logger format was no longer used. (Issue #317).
 
    The id and name of the task is now part of the log message again.

+ 2 - 2
celery/bin/celeryev.py

@@ -41,7 +41,7 @@ class EvCommand(Command):
         self.set_process_status("cam")
         kwargs["app"] = self.app
         if not detach:
-            return evcam(camera, logfile=logfile, **kwargs)
+            return evcam(camera, logfile=logfile, pidfile=pidfile, **kwargs)
         context, on_stop = create_daemon_context(
                                 logfile=logfile,
                                 pidfile=pidfile,
@@ -51,7 +51,7 @@ class EvCommand(Command):
                                 working_directory=working_directory)
         context.open()
         try:
-            return evcam(camera, logfile=logfile, **kwargs)
+            return evcam(camera, logfile=logfile, pidfile=pidfile, **kwargs)
         finally:
             on_stop()
 

+ 9 - 2
celery/events/snapshot.py

@@ -1,7 +1,9 @@
-from celery.utils import timer2
+import atexit
 
+from celery import platforms
 from celery.app import app_or_default
 from celery.datastructures import TokenBucket
+from celery.utils import timer2
 from celery.utils import instantiate, LOG_LEVELS
 from celery.utils.dispatch import Signal
 from celery.utils.timeutils import rate
@@ -69,8 +71,13 @@ class Polaroid(object):
 
 
 def evcam(camera, freq=1.0, maxrate=None, loglevel=0,
-        logfile=None, timer=None, app=None):
+        logfile=None, pidfile=None, timer=None, app=None):
     app = app_or_default(app)
+
+    if pidfile:
+        pidlock = platforms.create_pidlock(pidfile).acquire()
+        atexit.register(pidlock.release)
+
     if not isinstance(loglevel, int):
         loglevel = LOG_LEVELS[loglevel.upper()]
     logger = app.log.setup_logger(loglevel=loglevel,