使用celery最好使用3.7一下的版本,因?yàn)閍sync關(guān)鍵字的緣故,會(huì)報(bào)以下的錯(cuò)誤。
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
依賴(lài)綁定:
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')
# 創(chuàng)建任務(wù)函數(shù)
@app.task
def my_task():
? ? print("任務(wù)函數(shù)正在執(zhí)行....")
運(yùn)行:
celery -A tasks worker --loglevel=info
4.0以上的版本的celery運(yùn)行下來(lái)可能會(huì)報(bào)錯(cuò):
[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)
解決:(參考)
先安裝一個(gè)eventlet
pip install eventlet
然后啟動(dòng)worker的時(shí)候加一個(gè)參數(shù),如下:
celery -A <mymodule> worker --loglevel=info -P eventlet
使用:
進(jìn)入ipython
