NTI Transactions Utility
项目描述
nti.transactions
transaction包的扩展。
事务管理
nti.transactions.loop.TransactionsLoop 是一个可重试的事务管理器。从概念上讲,它类似于事务包本身提供的attempts上下文管理器,但功能更强大,并且可以通过子类进行扩展。功能包括
可配置的提交否决。
可扩展的测试以确定哪些异常应该重试。
当预期没有副作用时,能够中止事务并跳过可能昂贵的提交。
在重试之间进行睡眠。
详细的日志记录和时间跟踪。
TransactionLoop可以直接使用,也可以继承以进行定制。例如,用于Pyramid tween的最小子类可能如下所示(有关功能齐全的tween,请参阅 nti.transactions.pyramid_tween)
>>> class PyramidTransactionLoop(TransactionLoop): ... def prep_for_retry(self, number, request): ... request.make_body_seekable() ... def describe_transaction(self, request): ... return request.url
数据管理器
提供了一些数据管理器以方便使用。
第一个数据管理器在事务成功时将对象放入一个队列(具有 full 和 put_nowait 方法的某个东西)。如果队列已满,则不允许事务提交
>>> from nti.transactions.queue import put_nowait >>> put_nowait(queue, object)
这是 ObjectDataManager 的一个特例,它将在事务提交时调用一个方法,并传递任何参数。它可以配置为对事务是否应允许提交进行投票。这对于在事务成功时将项目放入Redis队列非常有用。可以直接构建它,但 do 函数是一个简化的方式,可以将它与当前事务连接起来
>>> from nti.transactions.manager import do >>> do(print, args=("Committed"))
更改
5.0.0 (2024-06-11)
添加对Python 3.12和3.13的支持。
取消对Python 2及低于Python 3.8的版本的支持。
添加指定循环应使用的非默认事务管理器的功能。
4.3.0 (2023-05-05)
添加对Python 3.10和3.11的支持。
4.2.1 (2021-05-25)
在由于异常而中止事务时,记录异常而不是仅记录异常类型(两次)。异常信息在理解错误的具体原因以及如何修复瞬态错误(例如,ZODB.POSException.ConflictError 包含对象ID和类,这可以用来减少冲突)时非常有帮助。这会使日志记录稍微昂贵一些(当启用时)。请参阅 PR 58。
4.2.0 (2021-02-11)
添加对Python 3.9的支持。
将CI从Travis CI迁移到Github Actions。
当Pyramid tween重试时,请求字典中的任何易失性属性(以 _v_ 开头的属性)将被删除。这受到 persistent 的启发,旨在方便安全缓存。与事务循环发送的事件相比,没有指定顺序。请参阅 问题 54。
修复了各种事件类未正确指定它们实现的接口的问题。例如,WillFirstAttempt 现在正确实现了 IWillFirstAttempt,而 WilLRetryAttempt 现在正确实现了 IWillRetryAttempt。请参阅 问题 52。
将 IWillLastAttempt 添加为 IWillRetryAttempt 的子类,并作为最后一个事件发出。
Pyramid tween现在发出 IWillRetryAttemptWithRequest 等,以提供对请求对象的简单访问。
4.1.0 (2020-07-22)
向pyramid tween事务工厂添加日志记录,以显示正在使用的设置。
添加 TransactionLoop.side_effect_free_log_level,并将默认值更改为DEBUG。在测试中将此值设置为ERROR或更高很有用。
添加 TransactionLoop.side_effect_free_resource_limit。
4.0.1 (2020-07-18)
添加对zope.event的缺失依赖。
当事务同步器在第一次调用时引发错误时,在循环的第二次和随后的调用中引发 AlreadyInTransaction 错误。请参阅 问题 49。
4.0.0 (2019-12-13)
至少需要 transaction 包的3.0版本。
取消对
dm.transaction.aborthook
包的依赖。该功能现在在3.0事务中已经原生动成。
3.1.1 (2019-12-10)
3.1.0 (2019-11-29)
添加对Python 3.8的支持。
重构内部实现细节。不再从
nti.transactions.transactions
导入所有内容,而是使用更具体的模块按功能分组对象。旧的导入仍然有效。在4.0中它们将生成弃用警告,在5.0中将被删除。添加Pyramid tween来管理事务和事务重试。可以配置各种设置作为Pyramid部署设置(例如,在ini文件中)。
使事务循环在重试之间增加睡眠时间,遵循以太网使用的随机二进制指数退避算法。
将默认尝试次数减少到4(一次尝试和3次重试)。请参见问题35。
使事务循环发出更多指标。请参见问题31。
使提交日志现在至少以调试级别发生,对于长时间提交升级为警告。它还包括重试次数和睡眠时间。请参见问题32。
使事务循环在事务生命周期的特定部分发出事件(使用
zope.event
)。请参见问题33。
3.0.0 (2019-09-06)
2.0.1 (2019-09-03)
修复与perfmetrics 3.0的兼容性:删除
from __future__ import unicode_literals
。
2.0.0 (2018-07-20)
在事务2.2中使用新的公共
isRetryableError
。此包的接口没有改变,但依赖项的重大版本升级需要在此处进行重大升级。请参见问题12。测试对Python 3.7的支持;删除对Python 3.4的支持。
TransactionLoop
更注意不要保留traceback对象,特别是在Python 2中。
1.1.1 (2018-07-19)
当
TransactionLoop
从TypeError
引发CommitFailedError
时,它保留原始消息。测试对Python 3.6的支持。
1.1.0 (2017-04-17)
添加一个新的ObjectDataManager,它将尝试在其他ObjectDataManagers之后执行。
1.0.0 (2016-07-28)
添加对Python 3的支持。
消除ZODB依赖。在提交期间,对于意外的
TypeErrors
不再引发ZODB.POSException.StorageError
,而是引发新的类nti.transactions.interfaces.CommitFailedError
。引入一个新的子类 TransactionError,即 AbortFailedError,在由于系统错误导致中止失败时抛出。
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源代码发行版
构建发行版
nti.transactions-5.0.0.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | a781e04a0cf7bf9911802aa4fbd69e12748aa3a7cb210438e4bccddd856965de |
|
MD5 | cbc91b0f7acf66a7ee67d89118634cb6 |
|
BLAKE2b-256 | e33ce3f6b4d3567bf61034890ff73a8052c7b8300d79aa2eb97a7e6db49b3b41 |
nti.transactions-5.0.0-py2.py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 349a35840ef66df0417eaf8c5a488a48c50e7c93e9895eb011df06ed5ec7aeb1 |
|
MD5 | 4bd7bd4ebf1cccf97bc959737630b408 |
|
BLAKE2b-256 | e0443121ada52deac3ddae18a21488cd1ed06925dd657f2a7c6a2d03b748ab3c |