До сих пор я работал только с python manage.py celeryd
, начиная его так:
python manage.py celeryd -l info --settings=settings
Код, на мой взгляд, делает это:
BinaryExecTask.delay(request.POST["binary_path"])
И код из моего settings.py
, это:
import djcelery
djcelery.setup_loader()
BROKER_BACKEND = "djkombu.transport.DatabaseTransport"
#celery
BROKER_HOST = "localhost"
BROKER_PORT = 5672
BROKER_USER = "guest"
BROKER_PASSWORD = "guest"
BROKER_VHOST = "/"
и он выполнит некоторые двоичные файлы в фоновом режиме. Дело в том, что некоторым двоичным файлам требуется довольно короткое время, а другим - до получаса. Работая с celeryd
, все мои задачи блокируются, пока текущая не завершит свое выполнение. Я видел здесь несколько примеров запуска celeryd_multi, но запуска:
python manage.py celeryd_multi start 3 --settings=settings -l info
выдает эту ошибку:
celeryd-multi v2.3.1
> Starting nodes...
> celery1.x: Traceback (most recent call last):
File "manage.py", line 14, in <module>
execute_manager(settings)
File "c:\code\python27\lib\site-packages\django-1.3-py2.7.egg\django\core\management\_
line 438, in execute_manager
utility.execute()
File "c:\code\python27\lib\site-packages\django-1.3-py2.7.egg\django\core\management\_
line 379, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "c:\code\python27\lib\site-packages\django_celery-2.3.3-py2.7.egg\djcelery\manage
s\celeryd_multi.py", line 22, in run_from_argv
["%s %s" % (argv[0], argv[1])] + argv[2:])
File "c:\code\python27\lib\site-packages\celery-2.3.1-py2.7.egg\celery\bin\celeryd_mul
172, in execute_from_commandline
self.commands[argv[0]](argv[1:], cmd)
File "c:\code\python27\lib\site-packages\celery-2.3.1-py2.7.egg\celery\bin\celeryd_mul
205, in start
retcode = self.waitexec(argv)
File "c:\code\python27\lib\site-packages\celery-2.3.1-py2.7.egg\celery\bin\celeryd_mul
354, in waitexec
pipe = Popen(argstr, env=self.env)
File "c:\code\python27\lib\subprocess.py", line 672, in __init__
errread, errwrite)
File "c:\code\python27\lib\subprocess.py", line 882, in _execute_child
startupinfo)
WindowsError: [Error 2] The system cannot find the file specified
celeryd-multi start 3 -c 3
выдает ту же ошибку. Что я должен сделать, чтобы я мог успешно запустить экземпляр сельдерея, который позволит мне выполнять больше задач параллельно? Кроме того, мне нужно сделать что-то другое, на мой взгляд?
РЕДАКТИРОВАТЬ: некоторые отладки привели меня сюда (site-packages \ celery-2.3.1-py2.7.egg \ celery \ bin \ celeryd_multi.py (354) waitexec)
351 def waitexec(self, argv, path=sys.executable):
352 args = " ".join([path] + list(argv))
353 -> argstr = shlex.split(args.encode("utf-8"))
354 pipe = Popen(argstr, env=self.env)
(Pdb) p argstr
['c:codepython27python.exe', 'manage.py', 'celeryd_detach', '-l', 'info', '--pidfile=celeryd@1.pid',
'-n', 'celery1.x', '--logfile=celeryd@1.log']
(Pdb) p Popen(argstr, env=self.env)
*** WindowsError: WindowsError(2, 'The system cannot find the file specified')
(Pdb)
Итак, как мы видим, путь к Python разрушен :). Что мне делать дальше?
EDIT2: я открыл проблему здесь