创建原子循环迭代(即使被中断也让迭代完成)
项目描述
创建原子循环迭代(即使被中断也让当前迭代完成)。
一个简单的上下文管理器,它异步监听潜在的 SIGINT和SIGTERM并为您提供纯布尔标志,可用于根据是否收到中断/终止信号来控制while循环的迭代流。
这以前是为强化学习库构建的,该库在迭代中训练其代理,并且每次训练中断时都必须优雅地完成当前正在运行的片段。
它在类似的用例中最有用,但实际上可以用于其他任何事情。从技术上讲,任何需要不间断运行的代码块。
请注意,您仍然可以使用SIGKILL 终止正在运行的进程。
入门
pip3 install atomicloop
以下示例循环运行 3 次迭代,每次持续 3 秒。您可以尝试通过按Ctrl+C(将 SIGINT发送到进程)来中断其中一个步骤。您将看到信号反馈,但程序将等待当前迭代完成并在循环迭代完成后退出。
此外,您可以看到上下文管理器知道它是否由于中断而完成。
import time
from atomicloop import AtomicLoop
# Optional callback handlers ----------------------------------------
def on_signal(signal, frame):
print(f' Received signal: {signal}')
print(' Finishing current step before terminating')
def on_exit(was_interrupted):
print(' Ended training')
print(f' Interrupted? {was_interrupted}')
# Running the loop --------------------------------------------------
goal_steps = 3
with AtomicLoop(on_signal, on_exit) as loop:
step_no = 0
while loop.run and step_no < goal_steps:
print(f'Starting training step #{step_no}')
time.sleep(3) # simulating some code execution
print(f'Finished training step #{step_no}')
print('----------------------------------\n')
step_no += 1
文档
atomicloop.AtomicLoop(on_signal=None, on_end=None)
创建所需上下文管理器的主要且唯一的类。
on_signal是在传入的 SIGINT或SIGTERM上调用的可调用对象。它使用 2 个参数调用:信号编号和当前堆栈帧。有关参数的详细信息,请参阅官方 signal.signal 文档中的处理程序部分 。
on_end是在退出上下文后(在with块之后)被调用的可调用对象。它使用单个布尔参数调用,说明执行是否被中断。
AtomicLoop()返回一个新实例。要访问布尔标志以进行流量控制,您必须将该标志作为实例的属性读取。
.run布尔标志表明程序是否应该继续执行。默认情况下 为True ,并在收到中断信号时切换为False 。
您还可以使用许多同义属性之一:
循环运行
循环.loop
循环移动
循环.cont
循环保持
loop.keep_going
循环不间断
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。
源分布
内置分布
atomicloop -1.0.0.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 5bc0934ac2b36f25b53f8fab692d94ce387c4fc548cd08de9e3cef5f64acb2c7 |
|
MD5 | 954c6ec0c627a922209d9b4ebf7b6ed7 |
|
布莱克2-256 | 0def3877b173ab2b5349bd95d05d5451a7aeefd6de3b64b7cc9c2bc08b88f4e6 |
atomicloop -1.0.0-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 370bd80775bc072d06f4505b80c0096417654136fd46c3722b263bcca9777ac5 |
|
MD5 | 66abb895b395b850f36a132cc98f570d |
|
布莱克2-256 | 24cad9fc4bd21de35633963dcdeb6efbb30ab5de740a4fa0c4157f2a9f3350b3 |