跳转到主要内容

在给定时间段内仅运行一次python脚本或函数。

项目描述

once_only

https://img.shields.io/pypi/v/once_only.svg Documentation Status

在给定时间段内仅运行一次python脚本或函数。

例如,如果您有一个可能会频繁调用的脚本或服务,但您只想每天报告一次错误以避免过多打扰人们,那么 once_only 就是您需要的库。

快速入门

假设您想让您的脚本抱怨,但不超过一天一次。 once_only.daily 是您需要的工具

import once_only

@once_only.daily
def complain():
    print("This is not right!")

现在您可以多次运行 complain,无论是从同一个python脚本还是从其他脚本,它最多一天运行一次,因此两次抱怨之间至少有24小时。

如果您想更频繁或更少地抱怨,还有其他变体

对象

时间差

once_only.weekly

1周

once_only.daily

1天

once_only.hourly

1小时

once_only.minutely

1分钟

once_only.Once()

自定义 datetime.timedelta

高级用法

您不仅可以使用 once_only.Once 对象作为装饰器,还可以通过 check_ready()check_ready_trigger() 函数直接访问它

import once_only
import datetime

once_every_two_hours = once_only.Once(datetime.timedelta(hours=2))

if once_every_two_hours.check_ready():
    print("More than two hours have passed since last run!")

if not_a_dry_run and once_every_two_hours.check_ready_trigger():
    print("Triggering timer and running!")

请注意,所有具有相同时间差的 once_only.Once 实例共享同一个计时器,但不同时间差的实例则不共享。因此,如果您之前从未运行过任何东西,这将

import once_only
import datetime

@once_only.minutely
def run_minutely():
    print("minutely")

@once_only.hourly
def run_hourly():
    print("hourly")

@once_only.Once(datetime.timedelta(minutes=60))
def run_every_60_minutes():
    print("60 minutes")

run_minutely()
run_hourly()
run_every_60_minutes()

打印“minutely”和“hourly”,但不会打印“60 minutes”,因为60分钟与一小时相同,所以60分钟的计时器已经被run_hourly触发,而run_every_60_minutes将不会运行。

更多信息请参阅: https://once_only.readthedocs.io.

许可

版权所有 2022,波茨坦气候影响研究学院 e.V.

根据Apache许可证版本2.0(“许可证”);除非符合许可证或书面同意,否则不得使用此文件。您可以在以下地址获得许可证副本:

https://apache.ac.cn/licenses/LICENSE-2.0

除非适用法律要求或书面同意,否则根据许可证分发的软件按“原样”分发,不提供任何形式的明示或暗示保证。有关许可证的具体语言管理权限和限制,请参阅许可证。

变更日志

1.0.0 (2022-09-16)

  • 首次提交。

  • 实现了once_only.Once类,具有直接访问API和装饰器功能。

  • 添加快速入门文档。

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源代码分发

once_only-1.0.0.tar.gz (14.6 kB 查看哈希值)

上传时间 源代码

构建分发

once_only-1.0.0-py3-none-any.whl (4.7 kB 查看哈希值)

上传时间 Python 3

由以下组织支持