跳转到主要内容

在任何地方使用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_reactorDeferredResultwrapped_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_reactorEventualResult.wait(timeout=None)现在已弃用,因为没有超时,它们可能会无限期地阻塞。

  • 现在可以通过wrapped_function属性访问使用wait_forrun_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 (63.8 kB 查看哈希值)

上传时间

构建分布

crochet-2.1.1-py3-none-any.whl (31.3 kB 查看哈希值)

上传时间 Python 3

由以下机构支持