Django中的计划任务
项目描述
关于
django-future 是一个Django应用程序,用于在指定时间安排任务。
django-future 允许您在给定时间安排可调用对象的调用。作业队列存储在数据库中,可以通过管理界面进行管理。排队作业通过调用外部django管理命令来运行。
用法
您需要安装 django-future。最新版本应在PyPI上可用。
要从您的代码中安排作业,请使用 schedule_job 函数
>>> from django_future import schedule_job >>> import datetime >>> schedule_job(datetime.datetime(2010, 10, 10), ... 'myproject.myapp.handlers.dosomething')
运行作业
计划作业不会自动启动。作业队列必须定期通过调用Django管理命令 runscheduledjobs 来处理。您可能希望定期运行此命令,例如在cron作业中,以确保计划作业及时运行。
当作业处理器启动时,它会检查同时活动的作业处理器。如果发现任何活动作业,新的作业处理器实例将不会继续,并引发错误,因此您不需要担心并行作业运行的重叠。
每个任务都在独立的数据库事务中运行。如果处理程序抛出错误,则事务将回滚。
默认情况下,已完成任务的作业条目会被标记为完成,但不会从数据库中删除。如果您不想保留它们,请使用 -d 参数调用 runscheduledjobs,它们将在成功完成后被删除。
如果作业处理程序抛出错误,队列处理程序将中止并显示跟踪回溯。如果您在这种情况下不想中止处理,请使用 -i 参数。无论如何,如果发生异常,跟踪回溯将被存储在数据库中的作业条目上。
如果作业返回一个值,该值的Unicode表示也将存储在数据库中的作业条目上。
调度时间
有几种方式可以指示作业应该执行的时间。您可以使用直接的日期时间(如上所示),但您也可以指定相对于当前时间的偏移量。偏移量可以指定为时间差
>>> schedule_job(datetime.timedelta(days=5), 'myproject.myapp.x')
或字符串
>>> schedule_job('5d', 'myproject.myapp.x')
还可以指定一个过期时间(默认为一周),这样就不会意外地运行旧作业。
>>> schedule_job('5d', 'myproject.myapp.x', expires='7d')
过期日期是相对于预定时间计算的。
参数
您可以将参数传递给作业
>>> schedule_job('5d', 'myproject.myapp.x', ... args=[1, 2], kwargs={'foo': 'bar'})
参数将被传递到可调用对象。请注意,参数必须是可序列化的。
您还可以将作业与数据库对象关联
>>> schedule_job('5d', 'myproject.myapp.x', ... content_object=some_model_instance)
如果指定,内容对象将被作为第一个参数传递给可调用对象。
如果您使用 job_as_parameter 装饰处理程序,则活动作业将被作为参数传递。示例
>>> from django_future import job_as_parameter >>> @job_as_parameter ... def handler(job): ... do_stuff()
重新安排
某些作业可能需要重复执行。您可以通过在作业的处理程序中安排新的作业来实现这一点,但使用作业上的 reschedule 方法会更方便。 reschedule 与 schedule_job 具有相同的签名,但它会复制当前作业的属性。
>>> @job_as_parameter ... def handler(job, n=5): ... do_something() ... job.reschedule('3d', kwargs={'n': 6})
当您向 reschedule 传递相对时间值时,新预定时间是通过将偏移量添加到原始作业的 预定时间 而不是实际执行的时间来计算的。
反馈
有一个主页,其中包含有关如何访问代码存储库的说明。
将反馈和建议发送到 team@shrubberysoft.com。
变更
0.2.3 版本的变更
修复了 ignore_errors 上的 NameError(感谢 doreilly@github)。
0.2.2 版本的变更
(感谢 Jannis Leidel!)
标记了用于翻译的字符串。
添加了德语翻译。
在作业正在运行的情况下,引发更友好的错误。
使用管理字段集。
0.2.1 版本的变更
修复了 start_scheduled_jobs 参数中的错误(感谢 Maciek Szczesniak)。
0.2.0 版本的变更
存储作业返回的字符串值。
0.1.9 版本的变更
在重新安排时,新日期是从当前作业的预定日期而不是实际运行开始计算的。
正确实现了并发作业处理程序的检查。
已过期作业的状态现在设置为“过期”。
0.1.8 版本的变更
更新了管理界面:彩色状态、按日期筛选。
重新使用了 django-picklefield 实现来存储作业参数,而不是自制序列化字段。
0.1.7 版本的变更
现在,doctests 是源分布的一部分。
0.1.6 版本的变更
一些包装和格式化更改。
0.1.5 版本的变更
基本保护措施,防止并发作业处理器。
增加了--ignore-errors选项。
0.1.4版本更改
事务支持。
为
runscheduledjobs
命令增加了-d
选项。更好的测试覆盖率。
0.1.3版本更改
修复了pickled字段实现。
简化了作业重新调度。
0.1.1版本更改
重命名为django-future。
0.1版本更改
首次公开发布。
django-future-0.2.3.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 936f70ea5e0a519e3f8c70f8c2cf72824e010a6e4ea3f2f1011e945b605d7b71 |
|
MD5 | 75b09c4f08f46995f22a8061a217a4ef |
|
BLAKE2b-256 | 8f79653f3edf565fd913e2e1a394c227474de8bc815fc8b679ce5c71a6c4b798 |