celery 1

使用环境:

  • window 7
  • celery 4.3.0
  • python 3.7

实践:

  1. 启动方式引起的问题:
[2019-05-24 16:18:15,545: INFO/MainProcess] Received task: tasks.add[5d387722-5389-441b-9b01-a619b93b4702]
[2019-05-24 16:18:15,550: ERROR/MainProcess] Task handler raised error: ValueError('not enough values to unpack (expected 3, got 0)',)
Traceback (most recent call last):
  File "F:\self\manager\venv\Lib\site-packages\billiard\pool.py", line 358, in workloop
    result = (True, prepare_result(fun(*args, **kwargs)))
  File "F:\self\manager\venv\Lib\site-packages\celery\app\trace.py", line 525, in _fast_trace_task
    tasks, accept, hostname = _loc
ValueError: not enough values to unpack (expected 3, got 0)
    • 原因:
      • celery以下几个并发模式的,prefork,threading,协程(gevent,eventlet)
      • 默认 perfork 启动(concurrency: 4 (prefork), fork是个进程)可设置:import os
        os.environ.setdefault('FORKED_BY_MULTIPROCESSING', '1'),也可以使用线程或者写成方式: -P event, -P gevent

  2. flask 程序中调用,但在celery -A task:celery -P gevent 启动后,站在celery启动角度,没有加载celery任务所在模块,引起的异常

Received unregistered task of type 'app.tasks.messageTasks.send_follow_message'.
The message has been ignored and discarded.
    ......
    ......
    ......
    strategy = strategies[type_]
KeyError: 'app.tasks.messageTasks.send_follow_message'
    • 解决:站在celery角度,启动时载入 celery 任务所在模块

  3. celery 启动时的 task:celery task.py 文件中不支持 if __name == "__main__": 的使用,即在其下是不可用,也就是说task.py 不是作为起始文件,是celery的中间调用文件

 

posted @ 2019-05-24 11:13  binger0712  阅读(439)  评论(0)    收藏  举报