Python环境下安装使用异步任务队列包Celery的基础教程
1.简介 celery(芹菜)是一个异步任务队列/基于分布式消息传递的作业队列。它侧重于实时操作,但对调度支持也很好。 2. 安装 brew install rabbitmq linux: sudo apt-get install rabbitmq-server 剩下两个都是Python的东西了,直接pip安装就好了,对于从来没有安装过MySQL驱动的同学可能需要安装MySQL-python。 $ rabbitmq-server[回车] 启动后不要关闭窗口,下面操作新建窗口(Tab) 3. 简单案例 from celery import Celery app = Celery('tasks',broker='amqp://guest@localhost//') @app.task def add(x,y): return x + y 在同级目录执行: $ celery -A tasks worker --loglevel=info 该命令的意思是启动一个worker,把tasks中的任务(add(x,y))把任务放到队列中。 >>> from tasks import add >>> add.delay(4,4) 到此为止,你已经可以使用celery执行任务了,上面的python交互模式下简单的调用了add任务,并传递4,4参数。 # coding:utf-8 import subprocess from time import sleep from celery import Celery backend = 'db+mysql://root:@192.168.0.102/celery' broker = 'amqp://guest@192.168.0.102:5672' app = Celery('tasks',backend=backend,broker=broker) @app.task def add(x,y): sleep(10) return x + y @app.task def hostname(): return subprocess.check_output(['hostname']) 除了添加backend之外,上面还添加了一个who的方法用来测试多服务器操作。修改完成之后,还是按照之前的方式启动。 >>> from tasks import add,hostname >>> r = add.delay(4,4) >>> r.ready() # 10s内执行,会输出False,因为add中sleep了10s >>> >>> r = hostname.delay() >>> r.result # 输出你的hostname 4. 测试多服务器 $ celery -A tasks worker --loglevel=info 发现前一个服务器的Celery服务中输出你刚启动的服务器的hostname,前提是那台服务器连上了你的rabbitmq。 >>> from tasks import hostname >>> >>> for i in range(10): ... r = hostname.delay() ... print r.result # 输出你的hostname >>> 看你输入的内容已经观察两台服务器上你启动celery服务的输出。 5. RabbitMQ远程连接的问题 6. 总结的说 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |