美文网首页
CELERY 测试多服务器

CELERY 测试多服务器

作者: MoonMonsterss | 来源:发表于2018-10-21 19:05 被阅读75次

    1.安装虚拟环境

    1.1 安装pipenv

    使用pip安装pipenv虚拟环境,比virtualenv使用更方便
    pip install pipenv

    1.2 创建虚拟环境

    创建文件夹,例如env1和env2,然后分别进入文件夹下,使用命令创建虚拟环境
    pipenv install

    1.3 启动虚拟环境

    如果需要启动虚拟环境,需要到响应的文件夹,例如env1,然后打开终端cmd,使用命令
    pipenv shell
    启动后,终端显示为
    (env1-p9sPCrEF) E:\CODE\CeleryStudy
    p9sPCrEF是虚拟环境的名称,在路径下可找到对应的文件夹。
    虚拟环境的路径是:
    C:\Users\chentao1\.virtualenvs\env1-p9sPCrEF

    2.安装库

    虚拟环境里默认只配置了python版本,所以对于用上的库需要重新安装,并且虚拟环境间是独立的,如果有多个虚拟机环境,则需要多次安装。

    2.1 eventlet

    在使用celery4.x时,必须安装这个,否则无法使用
    pipenv install eventlet

    2.2 安装celery

    pipenv install celery

    2.3 安装redis

    pipenv install redis

    3.实例

    3.1 celery配置

    celeryconfig.py

    BROKER_URL = 'redis://127.0.0.1:6379/7' #中间件
    CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/8'  #保存结果
    
    CELERY_TASK_SERIALIZER = 'json'
    CELERY_ACCEPT_CONTENT = ['json']
    CELERY_RESULT_SERIALIZER = 'json'
    CELERY_CONCURRENCY = 8
    

    3.2 实际代码

    from celery import Celery
    import time
    import celeryconfig
    
    app = Celery('tasks')
    app.config_from_object('celeryconfig')  #加载配置
    
    @app.task
    def add(x,y):
        time.sleep(0.3)
        return x + y
    
    @app.task
    def mul(x,y,z):
        time.sleep(0.2)
        return x * y * z
    

    4. 运行CELERY

    4.1 执行指令

    分别启动两个虚拟环境后,输入命令(不要忘记加上-P eventlet):
    celery -A tasks worker --loglevel=info -P eventlet
    正常启动后会打印一下信息:

    [tasks]
      . tasks.add
      . tasks.hostname
    
    [2018-09-05 14:11:15,556: INFO/MainProcess] Connected to redis://127.0.0.1:6379/
    7
    [2018-09-05 14:11:15,565: INFO/MainProcess] mingle: searching for neighbors
    [2018-09-05 14:11:16,589: INFO/MainProcess] mingle: all alone
    [2018-09-05 14:11:16,603: INFO/MainProcess] pidbox: Connected to redis://127.0.0
    .1:6379/7.
    [2018-09-05 14:11:16,608: INFO/MainProcess] celery@CHENTAO1 ready.
    

    4.2 命令解释

    -A : 代表的是Application的首字母,我们的应用是在tasks.py中定义的
    worker : 表示的是工人,执行任务用的
    --loglevel=info : 打印LOG等级,用来观察任务执行情况
    -P eventlet : celery4.x中必须添加的,不然会报错

    4.3 执行

    执行代码:

    from tasks import add,mul
    
    for _ in range(100):
        m = mul.delay(11,33,55)
        a = add.delay(10,250)
    
        print(m.get())
        print(a.get())
    

    两个虚拟环境都启动celery后,都会打印出下列的信息。

    [2018-09-05 14:36:05,690: INFO/MainProcess] Task tasks.mul[0fa4f82b-a462-4c1d-ab
    1a-1a16ffa90120] succeeded in 0.20300000000861473s: 19965
    [2018-09-05 14:36:05,795: INFO/MainProcess] Received task: tasks.add[80962729-9f
    b8-48b9-8e72-dedf029eab27]
    [2018-09-05 14:36:06,103: INFO/MainProcess] Task tasks.add[80962729-9fb8-48b9-8e
    72-dedf029eab27] succeeded in 0.3119999999908032s: 260
    [2018-09-05 14:36:06,114: INFO/MainProcess] Received task: tasks.add[734f212d-9a
    f9-4b61-b640-7b4ec45f27f1]
    

    如果先在两个虚拟环境中启动了celery,在运行过程中再启动第三个虚拟环境,也会自动接收任务并执行,打印结果。

    5.参考

    [https://blog.csdn.net/freeking101/article/details/74707619](https://blog.csdn.net/freeking101/article/details/74707619)
    [http://docs.celeryproject.org/en/latest/index.html](http://docs.celeryproject.org/en/latest/index.html)
    

    相关文章

      网友评论

          本文标题:CELERY 测试多服务器

          本文链接:https://www.haomeiwen.com/subject/xntizftx.html