celery安装

使用celery最好使用3.7一下的版本,因为async关键字的缘故,会报以下的错误。

Traceback (most recent call last):

  File "/Library/Frameworks/Python.framework/Versions/3.7/bin/celery", line 11, in <module>

    sys.exit(main())

  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/celery/__main__.py", line 30, in main

    main()

  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/celery/bin/celery.py", line 81, in main

    cmd.execute_from_commandline(argv)

  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/celery/bin/celery.py", line 793, in execute_from_commandline

    super(CeleryCommand, self).execute_from_commandline(argv)))

  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/celery/bin/base.py", line 311, in execute_from_commandline

    return self.handle_argv(self.prog_name, argv[1:])

  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/celery/bin/celery.py", line 785, in handle_argv

    return self.execute(command, argv)

  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/celery/bin/celery.py", line 717, in execute

    ).run_from_argv(self.prog_name, argv[1:], command=argv[0])

  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/celery/bin/worker.py", line 179, in run_from_argv

    return self(*args, **options)

  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/celery/bin/base.py", line 274, in __call__

    ret = self.run(*args, **kwargs)

  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/celery/bin/worker.py", line 194, in run

    pool_cls = (concurrency.get_implementation(pool_cls) or

  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/celery/concurrency/__init__.py", line 29, in get_implementation

    return symbol_by_name(cls, ALIASES)

  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/kombu/utils/__init__.py", line 96, in symbol_by_name

    module = imp(module_name, package=package, **kwargs)

  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/importlib/__init__.py", line 127, in import_module

    return _bootstrap._gcd_import(name[level:], package, level)

  File "<frozen importlib._bootstrap>", line 1006, in _gcd_import

  File "<frozen importlib._bootstrap>", line 983, in _find_and_load

  File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked

  File "<frozen importlib._bootstrap>", line 677, in _load_unlocked

  File "<frozen importlib._bootstrap_external>", line 728, in exec_module

  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed

  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/celery/concurrency/prefork.py", line 20, in <module>

    from celery.concurrency.base import BasePool

  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/celery/concurrency/base.py", line 21, in <module>

    from celery.utils import timer2

  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/celery/utils/timer2.py", line 19

    from kombu.async.timer import Entry, Timer as Schedule, to_timestamp, logger

                  ^

SyntaxError: invalid syntax

安装:

pip install -U Celery

依赖绑定:

pip install celery[librabbitmq]

pip install celery[librabbitmq,redis,auth,msgpack]

使用:

from celery import Celery

# 我们这里案例使用redis作为broker

app = Celery('demo', broker='redis://:332572@127.0.0.1/1')

# 创建任务函数

@app.task

def my_task():

    print("任务函数正在执行....")

运行:

celery -A tasks worker --loglevel=info

4.0以上的版本的celery运行下来可能会报错:

[2018-01-12 19:08:15,545: INFO/MainProcess] Received task: tasks.add[5d387722-5389-441b-9b01-a619b93b4702]

[2018-01-12 19:08:15,550: ERROR/MainProcess] Task handler raised error: ValueError('not enough values to unpack (expected 3, got 0)',)

Traceback (most recent call last):

  File "d:\programmingsoftware\python35\lib\site-packages\billiard\pool.py", line 358, in workloop

    result = (True, prepare_result(fun(*args, **kwargs)))

  File "d:\programmingsoftware\python35\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)

解决:(参考)

先安装一个eventlet

pip install eventlet

然后启动worker的时候加一个参数,如下:

celery -A <mymodule> worker --loglevel=info -P eventlet

使用:

进入ipython


©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 安装RabbitMQ,会提示安装Erlang,按照提示即可。 确认RabbitMQ是否安装成功。a. 启动Rabb...
    panda1987阅读 7,490评论 1 1
  • mean to add the formatted="false" attribute?.[ 46% 47325/...
    ProZoom阅读 2,729评论 0 3
  • # Awesome Python [![Awesome](https://cdn.rawgit.com/sindr...
    emily_007阅读 2,228评论 0 3
  • 题目1: DOM0 事件和DOM2级在事件监听使用方式上有什么区别? DOM0级事件处理方式:通过JavaScri...
    辉夜乀阅读 297评论 0 0
  • 深夜写在纸上的文字已经昏昏入睡 就如同初见你时在写着一年的文字识的清风,字里有雨 年月布满了整个星空风吹走了所有的...
    摘星辰丶阅读 1,445评论 14 43