50行Python代码实现简单的任务队列


50行Python代码实现简单的任务队列

当你的项目需要一个任务队列时,当然你会先想到celery,然后你花了三个月弄懂了基本的配置选项,你觉得已经生无可恋了。也许你可以使用简单一点的任务队列,如huey和rq。

或者,你自己写一个如何?你能做到的!

首先,我们使用redis作为消息的存储组件。我们不需要单独安装redis,我们用docker来获取一个redis。打开终端,然后运行

50行Python代码实现简单的任务队列

对,你做到了。然后我们创建一个Python虚拟环境来管理依赖库。我们需要redis的Python链接库和dill。

50行Python代码实现简单的任务队列

很好。我们的代码使用dill来把要执行的函数序列化为一个任务,然后存储到redis中。

客户端部分(任务队列的客户端,不是APP)

客户端把消息发送到任务队列中。打开一个编辑器,创建一个名为client.py的文件。然后我们定义要发送给worker(工作者进程)的任务,例如:

50行Python代码实现简单的任务队列

现在我们需要配置我们的redis客户端:

50行Python代码实现简单的任务队列

这些都完成后,我们开始生产一些任务,并且把它推送到任务队列中

50行Python代码实现简单的任务队列

工作者进程

工作者进程实际地完成任务。它们就是盯着消息队列,队列中有任务了就抓取下来,把任务完成,然后告诉队列我完成了,删除这个任务吧。就这么简单。打开编辑器,创建一个名为worker.py的文件,然后输入下面内容:

50行Python代码实现简单的任务队列

你已经完成了所以的代码,运行这个工作者进程吧:

50行Python代码实现简单的任务队列

你甚至可以在其他机器上运行,任务队列是天生支持分布式的。然后再运行客户端创造一些任务:

50行Python代码实现简单的任务队列

50行代码都不到,是不是很佩服自己?

英文原文:https://github.com/JoseTomasTocino/yotaq

译者:诗书塞外