1、特别说明
a、centos6.5 64
b、运行用户普通用户test
2、软件说明
a、celery-4.1.0
b、redis 2.8.17
c、python2.7.9
3、运行
a、编写一个tasks.py文件
from celery import Celery
app = Celery('hello', backend='redis://localhost:6300/', broker='redis://localhost:6300/')
@app.task
def add(a,b):
return a+b
b、加入一个任务
Python 2.7.9 (default, Jun 29 2017, 09:45:29)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from tasks import *
>>> add.delay(1,2)
<AsyncResult: d9416115-527a-457a-b22c-e8d17afa339a>
a、启动消费任务的工作进程
[test@kvm-121 ~]$ /usr/local/python27/bin/celery -A tasks worker --loglevel=info
-------------- celery@kvm-121 v4.0.2 (latentcall)
---- **** -----
--- * *** * -- Linux-2.6.32-431.el6.x86_64-x86_64-with-centos-6.5-Final 2017-07-13 18:31:57
-- * - **** ---
- ** ---------- [config]
- ** ---------- .> app: hello:0x7ff3799887d0
- ** ---------- .> transport: redis://localhost:6300//
- ** ---------- .> results: redis://localhost:6300/
- *** --- * --- .> concurrency: 4 (prefork)
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
--- ***** -----
-------------- [queues]
.> celery exchange=celery(direct) key=celery
[tasks]
. tasks.add
[2017-07-13 18:31:57,181: INFO/MainProcess] Connected to redis://localhost:6300//
[2017-07-13 18:31:57,188: INFO/MainProcess] mingle: searching for neighbors
[2017-07-13 18:31:58,207: INFO/MainProcess] mingle: all alone
[2017-07-13 18:31:58,217: INFO/MainProcess] celery@kvm-121 ready.
[2017-07-13 18:32:06,820: INFO/MainProcess] Received task: tasks.add[d80e865c-b02f-4fe5-96de-7e25826b2109]
4、错误解决
a、root运行,会提示权限过高
b、缺少timeout参数
File "/usr/local/python27/lib/python2.7/site-packages/kombu-4.0.2-py2.7.egg/kombu/transport/redis.py", line 671, in _receive
while c.connection.can_read(timeout=0):
TypeError: can_read() got an unexpected keyword argument 'timeout'
解决办法:
vim /usr/local/python27/lib/python2.7/site-packages/kombu-4.0.2-py2.7.egg/kombu/transport/redis.py
修改 while c.connection.can_read(timeout=0): 为 while c.connection.can_read():
File "/usr/local/python27/lib/python2.7/site-packages/celery-4.0.2-py2.7.egg/celery/backends/redis.py", line 69, in drain_events
m = self._pubsub.get_message(timeout=timeout)
解决办法:
vim /usr/local/python27/lib/python2.7/site-packages/celery-4.0.2-py2.7.egg/celery/backends/redis.py
flask 配置:
1、命令
celery -A main.celery worker --loglevel=info
a、centos6.5 64
b、运行用户普通用户test
2、软件说明
a、celery-4.1.0
b、redis 2.8.17
c、python2.7.9
3、运行
a、编写一个tasks.py文件
from celery import Celery
app = Celery('hello', backend='redis://localhost:6300/', broker='redis://localhost:6300/')
@app.task
def add(a,b):
return a+b
b、加入一个任务
Python 2.7.9 (default, Jun 29 2017, 09:45:29)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from tasks import *
>>> add.delay(1,2)
<AsyncResult: d9416115-527a-457a-b22c-e8d17afa339a>
a、启动消费任务的工作进程
[test@kvm-121 ~]$ /usr/local/python27/bin/celery -A tasks worker --loglevel=info
-------------- celery@kvm-121 v4.0.2 (latentcall)
---- **** -----
--- * *** * -- Linux-2.6.32-431.el6.x86_64-x86_64-with-centos-6.5-Final 2017-07-13 18:31:57
-- * - **** ---
- ** ---------- [config]
- ** ---------- .> app: hello:0x7ff3799887d0
- ** ---------- .> transport: redis://localhost:6300//
- ** ---------- .> results: redis://localhost:6300/
- *** --- * --- .> concurrency: 4 (prefork)
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
--- ***** -----
-------------- [queues]
.> celery exchange=celery(direct) key=celery
[tasks]
. tasks.add
[2017-07-13 18:31:57,181: INFO/MainProcess] Connected to redis://localhost:6300//
[2017-07-13 18:31:57,188: INFO/MainProcess] mingle: searching for neighbors
[2017-07-13 18:31:58,207: INFO/MainProcess] mingle: all alone
[2017-07-13 18:31:58,217: INFO/MainProcess] celery@kvm-121 ready.
[2017-07-13 18:32:06,820: INFO/MainProcess] Received task: tasks.add[d80e865c-b02f-4fe5-96de-7e25826b2109]
[2017-07-13 18:32:06,827: INFO/PoolWorker-3] Task tasks.add[d80e865c-b02f-4fe5-96de-7e25826b2109] succeeded in 0.00532940099947s: 3
redis中会生成很多的键值,键值过期时间为一天
4、错误解决
a、root运行,会提示权限过高
b、缺少timeout参数
File "/usr/local/python27/lib/python2.7/site-packages/kombu-4.0.2-py2.7.egg/kombu/transport/redis.py", line 671, in _receive
while c.connection.can_read(timeout=0):
TypeError: can_read() got an unexpected keyword argument 'timeout'
解决办法:
vim /usr/local/python27/lib/python2.7/site-packages/kombu-4.0.2-py2.7.egg/kombu/transport/redis.py
修改 while c.connection.can_read(timeout=0): 为 while c.connection.can_read():
File "/usr/local/python27/lib/python2.7/site-packages/celery-4.0.2-py2.7.egg/celery/backends/redis.py", line 69, in drain_events
m = self._pubsub.get_message(timeout=timeout)
解决办法:
vim /usr/local/python27/lib/python2.7/site-packages/celery-4.0.2-py2.7.egg/celery/backends/redis.py
m = self._pubsub.get_message(timeout=timeout) 改为 m = self._pubsub.get_message()
c、用gevent的方式部署web服务器,调用redis,会出现异常错误,gevent+redis客户端兼容性不好。
flask 配置:
1、命令
celery -A main.celery worker --loglevel=info