实现一个基于优先级队列的获取系统。
pqueue_fetcher的Python项目详细描述
实现一个基于优先级队列的获取系统。
可以通过传递fetch函数来使用Fetcher类 它接受任意类型的位置。
然后可以通过fetcher的add方法添加位置。
它旨在通过中断对^{tt2}的超时调用来管理取数。$ 通过重新输入失败的回迁到队列中 优先权改变的。
获取失败,可能是由于超时 或者通过被传递的success函数过滤掉, 被路由回源队列 它们的优先级被另一个传递的函数更改。
后续的获取将传递给results队列。
fetch函数可以是任何接受单个参数的函数: 因此,它可能执行的任务的范围是相对不受限制的。
Fetcher构造函数还接受一个数字的threadcount参数, 它将决定要运行的并发fetch函数的数量。
每个fetch调用都将在新生成的线程中进行。 这是一种相对简单的允许中断的方法 使用cPyThreadState_SetAsyncExc函数的调用。
便携性
因为它使用了cpython的底层c api, 此模块不可移植到其他python实现。
问题
由于python的线程功能的缺陷 作者一直无法解决的问题, 如果I/O上传递的fetch块可能会导致问题。
试图解决这些问题; 有关详细信息,请参见reactor函数。
尽管进行了这种尝试,代码仍然明显粗略。 想想你被警告了。
相关的注意事项是方法test.FetcherTester.test_incorrect_fission。 此测试强调了I/O块解决方案的脆弱性。 有关详细信息,请参阅该方法的文档。
许可证
pqueue_fetcher根据mit许可证获得许可。
许可证详细信息在文件COPYING中提供。
状态
尽管模块通过了相当简单的测试套件, 这并不能保证可用性。
特别是,这个模块还没有被使用 除了通过它的测试套件之外的任何事情。
开发人员寻找一个健壮的多线程文档检索解决方案 最好去别处看看, 可能从twisted框架开始。
pqueue_fetcher已执行 更多关于多线程和队列使用的练习 而不是为了创建一个可用的代码体。
它主要作为这些技术的一个例子出版, 为了突出一些困难 在编写线程化的python代码时。
模块也缺少一些明显的功能, 例如设置重试限制的能力。
应该在pqueue_fetcher上继续工作, 允许超时逻辑可能更有用 由fetch函数处理。