用于任务队列和周期性任务的多线程任务调度程序

taskutils的Python项目详细描述


#任务向导

taskutils是在python中实现多线程调度程序的工具。 它提供将任务排队和设置简单策略的方法,例如:

  • 按此优先级执行一次
  • 每10分钟执行一次
  • 如果失败,请重试两次
  • 同时执行不超过3个任务

它可以用来驱动需要并发的更复杂的程序,例如爬虫程序。

下面是用法示例:

###安装它

pip install taskutils

###导入相关对象

from taskutils import TaskHandler, Task, Recurrent

创建主任务处理程序对象

task_handler = TaskHandler(max_num_threads=3, sleep_seconds=2)

这将创建3个线程,每2秒等待任务排队

为一些简单的任务排队

def foo(k): print ‘hello world from task %s’ % k

for k in range(10):
task = Task(foo, kwargs=dict(k=k), priority=k, repeats_on_failure=3) task_handler.enqueue_task(task)

这将把10个任务(带有任意参数k=0…9)排队,这些任务将由 任务处理程序在空闲时线程如果任务失败,将重试3次,然后 丢弃的。请注意,任务包含一个函数(在本例中为foo)及其参数

###将重复任务排队

task = Task(foo, kwargs=dict(k=10), repeats_on_failure=0) task_handler.recurrent_tasks[‘abc’] = Recurrent(task, interval=3, repeats=5)

递归任务包装到Recurrent()对象中,必须命名(例如“abc”)。 周期性任务之所以命名,是因为它们不在正常队列中,而是始终执行 当他们的时间到了,有最大的优先权。在上面的示例中,执行“abc”任务 每3秒5次通过

del task_handler.recurrent_tasks[‘abc’]

###其他商品

from taskutils import LockWrapper with_a_lock = LockWrapper()

它定义了一个decorator,确保使用decorator调用的所有代码始终序列化,即使在不同的任务中调用:

@with_a_lock def f(): print ‘a’

@with_a_lock def g(): print ‘b’

task_handler.enqueue_task(Task(f)) task_handler.enqueue_task(Task(g))

这确保了函数f和g的执行永远不会并发。

##许可证

由Massimo di Pierro(http://experts4solutions.com)@2016 BSDV3许可证创建

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java播放流媒体音乐   LWJGL中的java纹理未显示   java从父集合中删除时删除子对象   mysql希望在我的代码中添加验证,如果表不存在,它应该用java创建新表   java我可以关闭客户端的socket而不引起服务器端的EOFEException吗?   java Primefaces对话框框架咆哮和showMessageInDialog不工作   hadoop配置单元无法初始化类java。网网络接口   关键字中缺少oracle11g Java iBatis   java在RESTAPI中创建PUT和POST端点,而不创建GET端点?   java Math abs和ceil输出编译错误   java Tomcat 8.017代md5及其摘要。球棒   java SpringBean配置xml文件在IteliJ Idea中加载   java为什么在使用Powershell指定Xms和Xmx时,它们什么都不做,但通过Netbeans IDE可以正常工作?   java Drools项目构建失败,kjar打包从7.7版开始