本帖最后由 Mr.TR 于 2018-8-2 20:21 编辑
使用过celery的同学,是不是觉得很繁琐,用起来很麻烦?本篇文章来简单给大家介绍另外一款异步任务框架dramatiq 有多年celery使用经验的罗马尼亚工程师Bogdan Popa觉得celery就是个大烂坑,于是发明了dramatiq dramatiq的驱动原则是如下: 高可靠性和高性能,简单易懂的核心,约定由于配置 下面是dramatiq,celery,RQ之间的主要区别:
下面来介绍一下安装方式: 如果安装有RabitMQ作为消息broker,安装方式: pip install -U 'dramatiq[rabbitmq, watch]' 如果安装有redis作为消息broker,安装方式: pip install -U 'dramatiq[redis, watch]' RabitMQ是推荐的消息broker,也是默认的,可以在代码中设置redis为broker
也可以用这种方式安装 pip install -U 'dramatiq[all]' 要配置RabbitMQ主机,实例化RabbitmqBroker,并在程序执行期间尽可能早地将其设置为global broker: [Python] 纯文本查看 复制代码 import dramatiq
from dramatiq.brokers.rabbitmq import RabbitmqBroker
rabbitmq_broker = RabbitmqBroker(host="rabbitmq")
dramatiq.set_broker(rabbitmq_broker) 要配置redis为broker: [Python] 纯文本查看 复制代码 import dramatiq
from dramatiq.brokers.redis import RedisBroker
redis_broker = RedisBroker(host="redis", port=6379)
dramatiq.set_broker(redis_broker) 演示代码,host,port根据具体情况配置
下面来简单介绍下dramatiq的使用。 dramatiq/demo1.py [Python] 纯文本查看 复制代码 import requests
import dramatiq
# print(dramatiq.get_broker())
@dramatiq.actor
def count_words(url):
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36"
}
try:
response = requests.get(url, headers=headers)
count = len(response.text.split(" "))
print("*" * 50)
print("There are {count} words at {url}.".format(count=count, url=url))
print("haha")
print("*" * 50)
except requests.exceptions.MissingSchema:
print("Message dropped due to invalid url: {}".format(url))
进入该文件所在目录,打开终端,进入python交互模式,输入 dramatiq demo1 再打开一个终端,进入python交互模式, 输入 from demo1 import count_words 输入 urls = ["https://news.ycombinator.com","https://xkcd.com","https://rabbitmq.com"] 再输入 [count_words.send(url) for url in urls] 显示结果如图
有一个注意事项是:因为所有的消息都必须通过网络发送,所以发送给actor的任何参数都必须是能被json编码的。
如果在第二个终端输入 : count_words.send("foo")
本篇文章先简单介绍到这里,后续再更新更多用法和特性
官方文档地址: https://dramatiq.io/v1.3.0/index.html
|