在任何地方使用Twisted!
项目描述
Crochet:在任何地方使用Twisted!
Crochet是一个MIT许可证的库,它使从常规阻塞代码使用Twisted变得更加容易。一些用例包括
轻松地从阻塞框架(如Django或Flask)使用Twisted。
编写一个提供阻塞API但使用Twisted实现库。
通过保留向后兼容层,更容易地将阻塞代码移植到Twisted。
允许使用线程的正常Twisted程序与其线程部分更干净地交互。例如,当使用Twisted作为WSGI容器时,这可能很有用。
Crochet由Itamar Turner-Trauring维护。
注意: 由于Crochet“只是工作得很好”,因此其开发速度相当缓慢。PyPI显示每月约有30,000次下载,因此现有用户似乎很满意:[https://pypistats.org/packages/crochet](https://pypistats.org/packages/crochet)
您可以通过运行以下命令安装Crochet:
$ pip install crochet
下载可在PyPI上找到。
文档可在Read The Docs上找到。
错误和功能请求应在项目的GitHub页面上提交。
API和功能
Crochet支持Python 3.8、3.9、3.10和3.11以及PyPy3。
钩针提供了以下基本API
允许阻塞代码通过使用 crochet.wait_for 装饰器调用Twisted,并阻塞直到结果可用或达到超时。
一个更底层的API(crochet.run_in_reactor)允许阻塞代码在Twisted线程中“在后台”运行代码,并能够反复检查是否完成。
Crochet将代表您执行以下操作以启用这些API
在它管理的线程中透明地启动Twisted的反应器。
当进程的主线程完成后自动关闭反应器。
将Twisted的日志系统连接到Python标准库的 logging 框架。与Twisted内置的 logging 桥接器不同,这包括对阻塞 Handler 实例的支持。
新增功能
2.1.0
各种内部现代化和维护。
删除了对Python 3.6和3.7的支持。
2.0.0
新功能
由于Árni Már Jónsson的贡献,现在可以装饰 async/await Twisted函数,使用 @wait_for 和 @run_in_reactor。
添加了类型提示,感谢Merlin Davis。
添加了对Python 3.9的正式支持。
删除的功能
删除了废弃的API @wait_for_reactor、@in_reactor、DeferredResult、wrapped_function 属性,以及 EventualResult.wait() 上的无限超时。
删除了对Python 2.7和3.5的支持。
1.12.0
错误修复
修复了32位机器上的超时溢出错误。
1.11.0
新功能
添加了对Python 3.8和PyPy 3的支持。
向后不兼容
由于最新的Twisted不支持,删除了对Python 3.4的支持。
1.10.0
新功能
添加了对Python 3.7的支持。感谢Jeremy Cline提供的补丁。
1.9.0
新功能
现在可以通过更标准的 __wrapped__ 属性访问由 @run_in_reactor 和 @wait_for 包装的底层可调用对象。
向后不兼容(在测试中)
实际上,这是在1.8.0中引入的:包装函数可能不会总是存在于装饰的可调用对象中。您应该使用 __wrapped__ 代替。
错误修复
修复了1.8.0中的回归,其中绑定方法无法被包装。感谢2mf提供的错误报告。
1.8.0
新功能
装饰函数的签名现在与原始函数相匹配。感谢Mikhail Terekhov提供的原始补丁。
文档改进,包括API参考。
错误修复
将日志线程切换到EPoll反应器。轶事证据表明这解决了AWS Lambda上的某些问题,但原因尚不清楚。感谢Rolando Espinoza提供的补丁。
现在可以在 @classmethod 上调用 @run_in_reactor 和 @wait_for。感谢vak提供的错误报告。
1.7.0
错误修复
如果Python logging.Handler 抛出异常,Crochet不再进入死亡螺旋。感谢Michael Schlenker提供的错误报告。
删除的功能
不再支持Twisted版本 <16.0(即不再在CI中进行测试)。
1.6.0
新功能
添加了对Python 3.6的支持。
1.5.0
新功能
添加了对Python 3.5的支持。
删除的功能
Python 2.6、Python 3.3和Twisted版本 <15.0不再受支持。
1.4.0
新功能
添加了对Python 3.4的支持。
文档
添加了一个关于已知问题和解决方案的章节。
错误修复
主线程检测(用于确定Crochet何时应该关闭)现在更稳定。这意味着Crochet现在支持更多环境,例如uWSGI。感谢Ben Picolo提供的补丁。
1.3.0
错误修复
现在可以在另一个线程持有导入锁的情况下,在导入时调用EventualResult.wait()(或包装在wait_for中的函数)。感谢Ken Struys提供的补丁。
1.2.0
新功能
crochet.wait_for实现了Crochet先前版本中记录的超时/取消模式。crochet.wait_for_reactor和EventualResult.wait(timeout=None)现在已弃用,因为没有超时,它们可能会无限期地阻塞。
现在可以通过wrapped_function属性访问使用wait_for和run_in_reactor包装的函数,以便简化底层Twisted代码的单元测试。
API变更
现在无法在导入时调用EventualResult.wait()(或使用wait_for包装的函数),因为这可能导致死锁或阻止其他线程导入。感谢Tom Prince提供的错误报告。
错误修复
warnings不再错误地转换为Twisted日志消息。
现在仅在调用crochet.setup()或crochet.no_setup()时导入reactor,如果仅导入crochet,则允许守护进程化。感谢Daniel Nephin提供的错误报告。
文档
改进了文档的动力,添加了联系方式和新闻。
更好的Crochet从普通Twisted应用程序中使用的示例。
1.1.0
错误修复
感谢Gavin Panella报告错误,现在可以从多个线程安全地使用EventualResult.wait()。
解决了由http://bugs.python.org/issue14976引起的日志代码中的重入死锁,感谢Rod Morehead提供的错误报告。
感谢Ben Cordero,Crochet现在再次可以安装在Python 3.3上。
感谢Konstantinos Koukopoulos,Crochet现在应该在Windows上工作。
Crochet测试现在可以在不将其绝对路径添加到PYTHONPATH或先安装它的情况下运行。
文档
EventualResult.original_failure现在有文档记录。
1.0.0
文档
添加了关于用例和替代方案的章节。感谢Tobias Oberstein的建议。
错误修复
不需要预先安装Twisted即可运行setup.py。感谢Paul Weaver提供的错误报告和Chris Scutcher提供的补丁。
导入Crochet不再有副作用(安装reactor事件)。
在关闭过程中中断阻塞调用更早,以减少死锁的范围。感谢rmorehead提供的错误报告。
0.9.0
新功能
扩展并大幅改进了文档,包括一个新的设计建议章节。
添加了新的装饰器@wait_for_reactor,它是@run_in_reactor的一个更简单的替代方案。
重构了@run_in_reactor,使其更加响应。
由于reactor已停止,因此无法完成的阻塞操作(如EventualResult.wait()或装饰的@wait_for_reactor调用)将用ReactorStopped异常中断。感谢rmorehead提供的错误报告。
错误修复
使用Ctrl-C中断@run_in_reactor装饰的函数(或其生成的包装器)。
在POSIX平台上,安装了一个工作程序,以确保由reactor.spawnProcess启动的进程的退出得到注意。有关底层问题的更多详细信息,请参阅Twisted票据6378。
0.8.1
感谢David Buchmann,现在如果在reactor线程中调用,EventualResult.wait()将引发错误。
单元测试现在包含在发布tar包中。
允许使用Ctrl-C中断EventualResult.wait(timeout=None)。
0.7.0
改进了文档。
0.6.0
将DeferredResult重命名为EventualResult,以减少与Twisted的Deferred类的混淆。旧名称仍然有效,但已弃用。
已弃用 @in_reactor,已用 @run_in_reactor 替换,该替换不会改变封装函数的参数。但弃用的API仍然可以使用。
在 EventualResult 对象中未处理的异常将被记录。
增加了更多示例。
现在应该可以正常运行 setup.py sdist。
0.5.0
初始发布。
项目详情
下载文件
下载您平台上的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源分布
构建分布
crochet-2.1.1.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 7ece69de1ce8e63ffc0af8e2331ec4eb898d91ed4271aafa4ccc398523b81cf9 |
|
MD5 | ebd10a867ef3ab576af5b1edd856d9dd |
|
BLAKE2b-256 | be3880218110ea772b52a217fe423786b2a91771466ce3f2284b080950fd72a6 |
crochet-2.1.1-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 87970cbd1b384a8d3b10152565283d76843d56ea7e087ea3239092a64ffaea0e |
|
MD5 | 4140af7abad09cbdd37fd3531c994684 |
|
BLAKE2b-256 | 5c18b3543d7ad6333bdcd1a9397525e85415bbcd1ce055c3917a713373e99a21 |