为Django制作和存储电子邮件备份
django-tasker的Python项目详细描述
死的简单异步任务队列。将任务存储在数据库中。 不需要仅仅为了从进程中丢弃某些东西而需要的开销基础设施。
https://github.com/wooyek/django-tasker
用法
您可以自由地从函数、类和实例方法创建任务。包装任务逻辑不需要样板函数。
使用django模型实例,任务将记住实例主键,加载实例并调用方法。
classSomeModel(models.Model):...@queueabledefupdate_this_instance(self,*args,**kwargs):...defmust_do_something(self):...self.update_this_instance.queue()...
对于普通的旧类对象,任务将调用它的classmethod。也支持正常功能。
classPocoClass(Object):@queueabledefdo_stuff_with_models(cls,limit):...@queueabledefbackground_job(cls,with_this,and_that):...PocoClass.do_stuff_with_models.queue(10)background_job.queue(foo,bar)
对参数序列化的支持有限
只要调用参数是json可序列化的,并且它们被序列化为一个TaskInfo.payload字段max_length,就支持它们。 我们不需要保存太多信息,最好模型实例只保存足够的信息,以便参数化任务执行。
为什么不是RQ?
Python-RQ是超级的。但它需要Redis。当你的背景工作没有堆积起来的时候就没事了。 使用redis保存千兆字节的任务数据就像烧钱一样。
为什么数据库作为存储?
因为你已经有了它,这是最简单的存储方式。扇形分叉导致数百万 在任务中,唯一便宜的存储是磁盘。
为什么不解雇更多的工人呢?
有时你只是不能足够快地处理任务,例如,由于api限制。这更明智 及时储存并执行。