收到芹菜任务但未执行

2024-04-24 19:28:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我有收到的芹菜任务,但不会执行。我使用的是Python2.7和Celery 4.0.2。我的消息代理是amazonsqs。在

这是celery worker的输出:

$ celery worker -A myapp.celeryapp --loglevel=INFO
[tasks]
  . myapp.tasks.trigger_build

[2017-01-12 23:34:25,206: INFO/MainProcess] Connected to sqs://13245:**@localhost//
[2017-01-12 23:34:25,391: INFO/MainProcess] celery@ip-111-11-11-11 ready.
[2017-01-12 23:34:27,700: INFO/MainProcess] Received task: myapp.tasks.trigger_build[b248771c-6dd5-469d-bc53-eaf63c4f6b60]

{{cd2>没有尝试添加。其他可能有用的信息:

  • Celery总是接收8个任务,尽管有大约100条消息等待接收。在
  • 实际上,每4到5次,一个任务就会运行并完成一次,但之后它又会卡住。在
  • 这是ps aux的结果。注意,它在3个不同的进程中运行celery(不知道为什么),其中一个进程的CPU利用率为99.6%,即使它没有完成任何任务或任何事情。在

流程:

^{pr2}$

设置:

CELERY_BROKER_URL = 'sqs://%s:%s@' % (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY.replace('/', '%2F'))
CELERY_BROKER_TRANSPORT = 'sqs'
CELERY_BROKER_TRANSPORT_OPTIONS = {
    'region': 'us-east-1',
    'visibility_timeout': 60 * 30,
    'polling_interval': 0.3,
    'queue_name_prefix': 'myapp-',
}
CELERY_BROKER_HEARTBEAT = 0
CELERY_BROKER_POOL_LIMIT = 1
CELERY_BROKER_CONNECTION_TIMEOUT = 10

CELERY_DEFAULT_QUEUE = 'myapp'
CELERY_QUEUES = (
    Queue('myapp', Exchange('default'), routing_key='default'),
)

CELERY_ALWAYS_EAGER = False
CELERY_ACKS_LATE = True
CELERY_TASK_PUBLISH_RETRY = True
CELERY_DISABLE_RATE_LIMITS = False

CELERY_IGNORE_RESULT = True
CELERY_SEND_TASK_ERROR_EMAILS = False
CELERY_TASK_RESULT_EXPIRES = 600

CELERY_RESULT_BACKEND = 'django-db'
CELERY_TIMEZONE = TIME_ZONE

CELERY_TASK_SERIALIZER = 'json'
CELERY_ACCEPT_CONTENT = ['application/json']

CELERYD_PID_FILE = "/var/celery_%N.pid"
CELERYD_HIJACK_ROOT_LOGGER = False
CELERYD_PREFETCH_MULTIPLIER = 1
CELERYD_MAX_TASKS_PER_CHILD = 1000

报告:

$ celery report -A myapp.celeryapp

software -> celery:4.0.2 (latentcall) kombu:4.0.2 py:2.7.12
            billiard:3.5.0.2 sqs:N/A
platform -> system:Linux arch:64bit, ELF imp:CPython
loader   -> celery.loaders.app.AppLoader
settings -> transport:sqs results:django-db

Tags: infofalsetrue消息taskbrokerresultmyapp
2条回答

我也有同样的问题。毗湿奴的答案对我有用。也许还有另一种解决方案不需要向worker命令添加这些额外的参数。在

我的问题是由于在任务代码中间导入其他模块而导致的。当您启动worker时,似乎celery获取所有使用过的模块,它只查看.py文件的开头。在运行期间,它不会引发任何错误,只是退出。在我移动所有的“导入”和“来自…”。。。导入…“到代码文件的开头,就可以了。在

我也遇到了同样的问题。经过一点搜索之后,我找到了将 without-gossip without-mingle without-heartbeat -Ofair添加到Celery worker命令行的解决方案。所以在你的情况下,你的工人命令应该是 celery worker -A myapp.celeryapp loglevel=INFO without-gossip without-mingle without-heartbeat -Ofair

相关问题 更多 >