Django 芹菜关闭

Django 芹菜关闭,django,celery,boto,amazon-sqs,kombu,Django,Celery,Boto,Amazon Sqs,Kombu,从芹菜2.4.5升级后,我开始让芹菜随机关机。 我在centOS机器上使用芹菜3.0.12、boto 2.6、amazon sqs和django 1.2.7(底部是pip冻结转储) 我在跑步 service celerybeat start service celeryd start 在我启动芹菜几秒钟后,它会停止(关闭),如果我查看芹菜日志,我总是看到: [2012-12-31 10:13:40,275: INFO/MainProcess] Task patrol.tasks.test[27

从芹菜2.4.5升级后,我开始让芹菜随机关机。
我在centOS机器上使用芹菜3.0.12、boto 2.6、amazon sqs和django 1.2.7(底部是pip冻结转储)

我在跑步

service celerybeat start
service celeryd start
在我启动芹菜几秒钟后,它会停止(关闭),如果我查看芹菜日志,我总是看到:

[2012-12-31 10:13:40,275: INFO/MainProcess] Task patrol.tasks.test[270f1558-bcc2-441b-8961 e1f21a2dbd27] succeeded in 0.318082094193s: None
[2012-12-31 10:13:40,424: INFO/MainProcess] child process calling self.run()
[2012-12-31 10:13:40,428: INFO/MainProcess] Got task from broker: patrol.tasks.myTask[d9a5ab26-71ca-448b-a4da-40315570f219]
[2012-12-31 10:13:40,666: INFO/MainProcess] Got task from broker: tasks.test[99edb7e2-caff-4892-a95b-c18a9d7f5c51]
[2012-12-31 10:13:41,114: WARNING/MainProcess] Restoring 2 unacknowledged message(s).
[2012-12-31 10:13:41,115: WARNING/MainProcess] UNABLE TO RESTORE 2 MESSAGES: (TypeError('<boto.sqs.message.Message instance at 0x3269758> is not JSON serializable',), TypeError('<boto.sqs.message.Message instance at 0x32697e8> is not JSON serializable',))
[2012-12-31 10:13:41,116: WARNING/MainProcess] EMERGENCY DUMP STATE TO FILE -> /tmp/tmppO4Bbp <-
[2012-12-31 10:13:41,116: WARNING/MainProcess] Cannot pickle state: TypeError('a class that defines __slots__ without defining __getstate__ cannot be pickled',). Fallback to pformat.
my/init.d/celeryd

my/default/celeryd

# Name of nodes to start, here we have a single node
# or we could have three nodes:
CELERYD_NODES="w1 w2"

CELERYD_LOG_LEVEL="INFO"

# Where to chdir at start.
CELERYD_CHDIR="/var/myproject"

# How to call "manage.py celeryd_multi"
CELERYD_MULTI="python $CELERYD_CHDIR/manage.py celeryd_multi"

# How to call "manage.py celeryctl"
CELERYCTL="python $CELERYD_CHDIR/manage.py celeryctl"

MAXTASKPERCHILD=2 # this is low on purpose to recreate the shutdown fast
CELERY_CONC=5
EXPRESS_CONC=2
# Extra arguments to celeryd
CELERYD_OPTS="-Q:w1 celery,backup -c:w1 $CELERY_CONC -Q:w2 express -c:w2 $EXPRESS_CONC --time-limit=3600 --maxtasksperchild=$MAXTASKPERCHILD -E"

# Name of the celery config module.
CELERY_CONFIG_MODULE="celeryconfig"

# %n will be replaced with the nodename.
CELERYD_LOG_FILE="/var/log/celeryd/%n.log"
CELERYD_PID_FILE="/var/run/celeryd/%n.pid"

# Name of the projects settings module.
export DJANGO_SETTINGS_MODULE="settings"

# Path to celerybeat
CELERYBEAT="python $CELERYD_CHDIR/manage.py celerybeat"

# Extra arguments to celerybeat.  This is a file that will get
# created for scheduled tasks.  It's generated automatically
# when Celerybeat starts.
CELERYBEAT_OPTS="--schedule=/var/run/celerybeat-schedule"

# Log level. Can be one of DEBUG, INFO, WARNING, ERROR or CRITICAL.
CELERYBEAT_LOG_LEVEL="INFO"

# Log file locations
CELERYBEAT_LOGFILE="/var/log/celeryd/celerybeat.log"
CELERYBEAT_PIDFILE="/var/run/celeryd/celerybeat.pid"
我的皮普冻住了

Django==1.2.7
M2Crypto==0.20.2
MySQL-python==1.2.3c1
amqp==1.0.6
amqplib==1.0.2
anyjson==0.3.3
billiard==2.7.3.19
boto==2.1.1
celery==3.0.12
certifi==0.0.6
distribute==0.6.10
django-celery==3.0.11
django-kombu==0.9.4
django-picklefield==0.3.0
ghettoq==0.4.5
importlib==1.0.2
iniparse==0.3.1
ipython==0.12
kombu==2.5.4
lxml==2.3.4
mixpanel-celery==0.5.0
netaddr==0.7.6
numpy==1.6.2
odict==1.4.4
ordereddict==1.1
pycrypto==2.6
pycurl==7.19.0
pygooglechart==0.3.0
pygpgme==0.1
python-dateutil==1.5
python-memcached==1.48
pytz==2012h
requests==0.9.0
six==1.2.0
urlgrabber==3.9.1
yum-metadata-parser==1.1.2

我假设您有一个应用程序,它将一些非json格式的内容放入队列。比如短信。您可以尝试更改芹菜设置中的队列,并查看它的工作方式

将Kombu升级到2.5.4之后的任何版本,因为它是Kombu中的一个bug。它应该固定在芹菜>=3.0.20的任何版本中(这取决于kombu>=2.5.5)


请参见

在我的例子中,我使用了错误版本的python
python3.8
,但是我需要一个旧版本

所以我更新了版本:

pyenv install 3.6.7 
pyenv local 3.6.7
pyenv local
virtualenv -p python3.6 venv 
source venv/bin/activate
pip install -r requirements.txt

在消息已经关闭后放置消息,即使我使其不重新获取消息,它仍然会关闭。芹菜从兔子队列中以消息的形式首次读取任务,您会看到意外任务格式的异常。检查rabbitmq或SQS中的队列条目。尝试关闭时发生josn错误。代码在kombu的close方法中,我在芹菜==4.4.2&kombu==4.6.8上看到了这个问题。还有其他解决办法吗?
pyenv install 3.6.7 
pyenv local 3.6.7
pyenv local
virtualenv -p python3.6 venv 
source venv/bin/activate
pip install -r requirements.txt