使用过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]
纯文本查看
复制代码
1 2 3 4 5 6 | import dramatiqfrom dramatiq.brokers.rabbitmq import RabbitmqBrokerrabbitmq_broker = RabbitmqBroker(host="rabbitmq")dramatiq.set_broker(rabbitmq_broker) |
要配置redis为broker:
[Python]
纯文本查看
复制代码
1 2 3 4 5 6 | import dramatiqfrom dramatiq.brokers.redis import RedisBrokerredis_broker = RedisBroker(host="redis", port=6379)dramatiq.set_broker(redis_broker) |
演示代码,host,port根据具体情况配置
下面来简单介绍下dramatiq的使用。
dramatiq/demo1.py
[Python]
纯文本查看
复制代码
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 | import requestsimport dramatiq# print(dramatiq.get_broker())@dramatiq.actordef 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")

本篇文章先简单介绍到这里,后续再更新更多用法和特性
更多免费技术资料可关注:annalin1203