|
@@ -1,11 +1,14 @@
|
|
|
-import sys
|
|
|
+import os
|
|
|
+import shlex
|
|
|
import socket
|
|
|
+import sys
|
|
|
|
|
|
from celery.utils.compat import defaultdict
|
|
|
|
|
|
EXAMPLES = """
|
|
|
Some examples:
|
|
|
|
|
|
+ # The "start" command just prints the commands needed to start the workers.
|
|
|
# Advanced example with 10 workers:
|
|
|
# * Three of the workers processes the images and video queue
|
|
|
# * Two of the workers processes the data queue with loglevel DEBUG
|
|
@@ -13,20 +16,25 @@ Some examples:
|
|
|
$ celeryd-multi start 10 -l INFO -Q:1-3 images,video -Q:4,5:data
|
|
|
-Q default -L:4,5 DEBUG
|
|
|
|
|
|
+ # To actually start the workers into the background you need to
|
|
|
+ # use the "detach" command:
|
|
|
+ $ celeryd-multi detach 10 -l INFO -Q:1-3 images,video -Q:4,5:data
|
|
|
+ -Q default -L:4,5 DEBUG
|
|
|
+
|
|
|
# get commands to start 10 workers, with 3 processes each
|
|
|
- $ celeryd-multi start 3 -c 3
|
|
|
+ $ celeryd-multi detach 3 -c 3
|
|
|
celeryd -n celeryd1.myhost -c 3
|
|
|
celeryd -n celeryd2.myhost -c 3
|
|
|
celeryd- n celeryd3.myhost -c 3
|
|
|
|
|
|
# start 3 named workers
|
|
|
- $ celeryd-multi start image video data -c 3
|
|
|
+ $ celeryd-multi detach image video data -c 3
|
|
|
celeryd -n image.myhost -c 3
|
|
|
celeryd -n video.myhost -c 3
|
|
|
celeryd -n data.myhost -c 3
|
|
|
|
|
|
# specify custom hostname
|
|
|
- $ celeryd-multi start 2 -n worker.example.com -c 3
|
|
|
+ $ celeryd-multi detach 2 -n worker.example.com -c 3
|
|
|
celeryd -n celeryd1.worker.example.com -c 3
|
|
|
celeryd -n celeryd2.worker.example.com -c 3
|
|
|
|
|
@@ -34,20 +42,20 @@ Some examples:
|
|
|
# but you can also modify the options for ranges of or single workers
|
|
|
|
|
|
# 3 workers: Two with 3 processes, and one with 10 processes.
|
|
|
- $ celeryd-multi start 3 -c 3 -c:1 10
|
|
|
+ $ celeryd-multi detach 3 -c 3 -c:1 10
|
|
|
celeryd -n celeryd1.myhost -c 10
|
|
|
celeryd -n celeryd2.myhost -c 3
|
|
|
celeryd -n celeryd3.myhost -c 3
|
|
|
|
|
|
# can also specify options for named workers
|
|
|
- $ celeryd-multi start image video data -c 3 -c:image 10
|
|
|
+ $ celeryd-multi detach image video data -c 3 -c:image 10
|
|
|
celeryd -n image.myhost -c 10
|
|
|
celeryd -n video.myhost -c 3
|
|
|
celeryd -n data.myhost -c 3
|
|
|
|
|
|
# ranges and lists of workers in options is also allowed:
|
|
|
# (-c:1-3 can also be written as -c:1,2,3)
|
|
|
- $ celeryd-multi start 5 -c 3 -c:1-3 10
|
|
|
+ $ celeryd-multi detach 5 -c 3 -c:1-3 10
|
|
|
celeryd -n celeryd1.myhost -c 10
|
|
|
celeryd -n celeryd2.myhost -c 10
|
|
|
celeryd -n celeryd3.myhost -c 10
|
|
@@ -55,7 +63,7 @@ Some examples:
|
|
|
celeryd -n celeryd5.myhost -c 3
|
|
|
|
|
|
# lists also works with named workers
|
|
|
- $ celeryd-multi start foo bar baz xuzzy -c 3 -c:foo,bar,baz 10
|
|
|
+ $ celeryd-multi detach foo bar baz xuzzy -c 3 -c:foo,bar,baz 10
|
|
|
celeryd -n foo.myhost -c 10
|
|
|
celeryd -n bar.myhost -c 10
|
|
|
celeryd -n baz.myhost -c 10
|
|
@@ -185,10 +193,19 @@ def say(m):
|
|
|
sys.stderr.write("%s\n" % (m, ))
|
|
|
|
|
|
|
|
|
+def detach_worker(argv):
|
|
|
+ path = sys.executable
|
|
|
+ argv = [sys.executable, "-m", "celery.bin.celeryd_detach"] + argv
|
|
|
+
|
|
|
+ if os.fork() == 0:
|
|
|
+ os.execv(path, argv)
|
|
|
+
|
|
|
+
|
|
|
class MultiTool(object):
|
|
|
|
|
|
def __init__(self):
|
|
|
self.commands = {"start": self.start,
|
|
|
+ "detach": self.detach,
|
|
|
"names": self.names,
|
|
|
"expand": self.expand,
|
|
|
"get": self.get,
|
|
@@ -224,6 +241,13 @@ class MultiTool(object):
|
|
|
print("\n".join(worker
|
|
|
for _, worker, _ in multi_args(p, cmd)))
|
|
|
|
|
|
+ def detach(self, argv, cmd):
|
|
|
+ p = NamespacedOptionParser(argv)
|
|
|
+ p.options.setdefault("--pidfile", "celeryd@%n.pid")
|
|
|
+ p.options.setdefault("--logfile", "celeryd@%n.log")
|
|
|
+ for argv in [argv for _, argv, _ in multi_args(p, cmd)]:
|
|
|
+ detach_worker(shlex.split(argv))
|
|
|
+
|
|
|
def expand(self, argv, cmd=None):
|
|
|
template = argv[0]
|
|
|
p = NamespacedOptionParser(argv[1:])
|