迭代工作队列

workq的Python项目详细描述


https://travis-ci.org/klmitch/workq.svg?branch=master

在程序设计中,递归算法存在一些问题。 其中之一是堆栈:每个递归都向 堆叠。这可以通过尾部递归来缓解,但是尾部递归 不总是可能的。第二个问题是循环:考虑加载 包含“include”指令的一系列文件,其中 文件本身或另一个 包含它的“include”。

解决这些问题的一个好方法是重新构造递归 迭代算法。WorkQueue是一个用于执行 正是这样;它是工作项的迭代器,其中工作项可以 在迭代期间添加到队列中。一个WorkQueue也有 支持跟踪以前添加到队列中的项, 通过忽略重复项来消除循环问题。

基本用法

WorkQueue的基本用法非常简单–一个简单的用法 用一系列工作项初始化它,然后在 项目,根据需要添加新项目:

wq = workq.WorkQueue([item])
for item in wq:
    # Do work

    # Add one item to the queue
    wq.add(new_item)

    # Alternatively, add a sequence of items to the queue
    wq.extend(new_items)

将跟踪添加到队列中的每个项,并尝试添加项 已经添加的内容将被忽略。这可能是 通过将unique=False传递给WorkQueue构造函数禁用。 如果工作项不可哈希,或者必须根据 项的某些属性(例如,实例属性),然后传递 keyWorkQueue构造函数可调用;此可调用将 使用一个参数(工作项)调用,并且必须返回密钥 对应于那个项目。

工时数

WorkQueue对象的长度是仍然存在的工作项数 在队列中。aWorkQueue还跟踪 已添加到其中的工作项;可以访问此计数 通过count属性。最后是 可以通过worked属性访问have been worked。作为 例如:

>>> wq = workq.WorkQueue(['a', 'b'])
>>> next(wq)
'a'
>>> wq.add('c')
>>> len(wq)
2
>>> wq.count
3
>>> wq.worked
1

工作项唯一性

WorkQueue对象使用pythonset跟踪 以前添加过,以防止重复。这不是 对每个应用程序都是必需的,有些应用程序可能具有 工作项的数量,甚至是一个永无止境的流。到 为了适应这种情况,可以将unique关键字参数传递给 WorkQueue构造函数,值为False;这将禁用 使用set并控制内存使用。

使用set的另一个问题是某些工作项可能不是 散列的,或者当对象 代表不是。为了适应这种情况,请使用key关键字 WorkQueue构造函数的参数;它标识一个可调用的, 类似于sort()sorted()key参数, 传递工作项并返回要与 set。这也可以用来控制内存使用,方法是 允许set存储短字符串,而不是 大型物体。

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

推荐PyPI第三方库


热门话题
java MongoOperations Upert/FindModify删除mongo中的所有字段   java括号中的二叉树,而!=空值无效   java com.*.*.**。安全CustomUserDetail无法强制转换为com。***。安全CustomUserDetail   java如何编写多线程算法来发现可用socket   java Spring Boot Solr:子文档的索引列表   java如何向maven shade插件添加外部jar文件   java zebra条形码扫描仪Android studio集成   java为什么一个地方的原始类型会导致其他地方的通用调用站点被视为原始类型?   java将swing控件拆分为相等的部分   java如何在jshell中为spring项目设置类路径   java关于如何从API级别19的时间选择器中删除此白边的提示?   存储二进制字符串所有可能序列的算法,Java   测试JUnitJava。lang.NullPointerException   java Google AppEngine数据库   JavaSpring如何向数据对象注入@Value?   在eclipse java项目中包含mavenant构建库   带有JSP/EL的java省略号(缩写文本)