我有芹菜任务(作为Django应用程序的一部分运行),通常需要约5秒钟。大多数情况下,它运行良好,几秒钟后我用AsyncResult
查询它时,我得到SUCCESS
作为状态。然而,偶尔看来,任务返回之间存在非常长的滞后(通过在任务调用的函数的返回语句之前放置日志语句来测试)和celery确认它成功(如Celery记录的那样)像:
Task dynamicapp.tasks.myTask[090422da-184c-40ce-8d5d-3dcba6680219] succeeded in 129.666630374s
。
正如你所看到的,这是约2分钟,即使函数本身在通常的~5秒后返回。有时,我甚至看到这需要大约15分钟的时间来承认“成功”。
我正在使用Celery 4.0并在Heroku上部署Django应用程序,因为它的价值。
编辑:
以下celery report
的输出:
software -> celery:4.0.0 (latentcall) kombu:4.0.0 py:2.7.11
billiard:3.5.0.2 py-amqp:2.1.1
platform -> system:Linux arch:64bit, ELF imp:CPython
loader -> celery.loaders.default.Loader
settings -> transport:amqp results:disabled
这非常有趣,因为看起来results:disabled
可能是罪魁祸首......然而,当我部署到Heroku时,结果已启用并且看起来像是在工作(请参阅下面的日志):< / p>
Nov 24 04:28:56 myApp app/worker.2: -- * - **** ---
Nov 24 04:28:56 myApp app/worker.2: - ** ---------- [config]
Nov 24 04:28:56 myApp app/worker.2: - ** ---------- .> app: dynamicapp:0x7fe829e2cad0
Nov 24 04:28:56 myApp app/worker.2: - ** ---------- .> transport: redis://h:**@<my redis>//
Nov 24 04:28:56 myApp app/worker.2: - ** ---------- .> results: redis://h:**@<my redis>/
Nov 24 04:28:56 myApp app/worker.2: - *** --- * --- .> concurrency: 4 (prefork)
Nov 24 04:28:56 myApp app/worker.2: -- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
Nov 24 04:28:56 myApp app/worker.2: --- ***** -----
Nov 24 04:28:56 myApp app/worker.2: -------------- [queues]
Nov 24 04:28:56 myApp app/worker.2: .> celery exchange=celery(direct) key=celery
编辑2:
celery -A <project> report
的输出 - 这来自我的主settings.py
所以Celery特定的部分如下所示:
software -> celery:4.0.0 (latentcall) kombu:4.0.0 py:2.7.11
billiard:3.5.0.2 redis:2.10.5
platform -> system:Linux arch:64bit, ELF imp:CPython
loader -> celery.loaders.app.AppLoader
settings -> transport:redis results:redis://h:**@<my redis>/
CELERY_ACCEPT_CONTENT: ['json']
CACHES: {
'default': { 'BACKEND': 'redis_cache.RedisCache',
'LOCATION': <my redis>',
'OPTIONS': { 'DB': 0, 'PASSWORD': u'********'}}}
CELERY_TASK_RESULT_EXPIRES: 300
CELERY_INCLUDE: ['dynamicapp.tasks']
CELERY_TASK_SERIALIZER: 'json'
CELERY_RESULT_BACKEND: 'redis://h:********@<my redis>/'
CELERYD_MAX_TASKS_PER_CHILD: 2
BROKER_URL: 'redis://h:********@<my redis>//'