celery的部署

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]  

        [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

猜你喜欢

转载自blog.csdn.net/pengwupeng2008/article/details/76642953