Celery任务在返回后的几分钟内不算作“成功”

时间:2016-11-24 09:35:05

标签: django heroku celery django-celery

我有芹菜任务(作为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>//'

0 个答案:

没有答案