Github Actions 执行Python定时任务(时区及缓存问题处理)

这篇具有很好参考价值的文章主要介绍了Github Actions 执行Python定时任务(时区及缓存问题处理)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Github Actions

文档地址:https://docs.github.com/en/actions

这两天一直在学习Github Actions,很是兴奋,才发现这么好的东西,相见恨晚。

它是什么呢,简单讲,就是让你的Github项目具备持续集成的能力,类似于传统工具jenkins,Gitlab的CI/CD功能等,但Github Actions更加强大。

我尝试简单实践了一下,将前几天写的python包加了一下这个功能,用起来很简单,只要在代码里,创建一个.github/workflows的文件夹,里边加.yml文件就可以了,代码量很少,更多的是需要理解。

name: Python package
on:
  push:
    tags:
      - "v*.*.*"
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Build and publish to pypi
        uses: JRubics/poetry-publish@v1.13
        with:
          pypi_token: ${{ secrets.PYPI_TOKEN }}
      - name: release
        uses: softprops/action-gh-release@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

上面是我给pywencai配置的,具体的功能为:在一个tag推送到仓库时,自动执行发布pypi和发布 github release的功能,相当方便。

定时任务

除了执行一些测试或发布的任务,Github Actions 还可以执行定时任务,而且是免费的(虽然有一定配额限制),这不得赶紧白嫖一下。

核心的能力在于触发工作流里的事件,具备schedule这种类型,下面我们具体设置它

schedule具体文档: https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#schedule

name: Schedule Worker
on:
  schedule:
    - cron: '40 3,9 * * *' #每日11点40,17点40,两个时间点执行任务
jobs:
  work:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: szenius/set-timezone@v1.0 # 设置执行环境的时区
        with:
          timezoneLinux: "Asia/Shanghai"
      - uses: actions/setup-python@v4 # 使用python装配器
        with:
          python-version: '3.10' # 指定python版本
          cache: 'poetry' # 设置缓存

      - run: poetry install --without dev # 安装
      - run: poetry run python .\bin.py # 执行

上边是我最终的配置,下面着重解释两个问题:时区 和 缓存策略

时区

schedule时区

Github是国际网站,默认时区肯定不是中国时区,而是UTC时间(协调世界时间),大概是冰岛和英国的时区。

UTC时间在线演示:https://time.is/UTC

最终的结论就是,比北京时间慢8小时,用目标时间减8就可以了。

注意,对于schedulecron字段,Github官方并没有提供更改时间的配置,只能自己算UTC时间,关于这个问题,也有人反馈,不过一直也没人解决。

关于schedule时区问题的讨论:https://github.com/community/community/discussions/13454

schedule延迟问题

我尝试跑了一天的schedule,发现执行任务的时间,跟我设置的时间有差别,少则几十分钟,多则几个小时,相当不准时(官方文档也明确写了,就是不准时,无奈)。所以,如果需要精准时间的定时任务无法用它来执行。

虚拟环境的时区

虽然,我们无法更改cron字段的时区,但虚拟环境的时区,是有方法可以改的,因为在程序中,很可能用到时间,我们当然希望是国内时间。set-timezone是一个可以设置环境时区的action,使用它就可以了,具体参考上边的代码示例。

set-timezone: https://github.com/szenius/set-timezone

缓存策略

由于想要执行的是定时任务,所以其实不希望每次执行都重新安装依赖,除非有依赖更新再重新安装。这个问题Github Actions也已经替我们想到了,具体参看官方文档。

使用缓存: https://docs.github.com/en/actions/using-workflows/caching-dependencies-to-speed-up-workflows

总结一下,就是可以通过配置,将指定目录的文件缓存下来,并记录一个key与其对应。如果下次执行,提供的还是这个key,那么就启用这个缓存,如果不是,就不适用缓存,重新安装依赖。

目前的大部分语言的包管理器(至少node.js和python),都具备lock文件。所以,就可以根据lock文件的哈希值,创建缓存的key,如果哈希值不变,就说明依赖没变,使用缓存,如果变了,就重新安装。

就以上这个过程,其实也不需要我们一步一步做,以python程序为例,官方已经为我们提供了setup-python,并封装好了缓存策略,只要简单的配置就可以使用,具体参看官方文档和我上边的示例。

setup-python: https://github.com/actions/setup-python

其他语言也有,每种语言都有自己的缓存策略配置,参见上文使用缓存文档连接。

结语

Github Actions的玩法很丰富,应该混Github社区必备技能之一,值得深度学习和使用。文章来源地址https://www.toymoban.com/news/detail-486825.html

到了这里,关于Github Actions 执行Python定时任务(时区及缓存问题处理)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • flask python 设置定时任务 flask 周期性执行任务方案

    flask 通常使用 flask_apscheduler 框架设计定时任务,flask_apscheduler 功能很全面,能按设定的时间规则执行任务,可以持久化到各类数据库(mysql,redis,mongodb),实现对定时任务增、删、改、查等操作。 方法三:通过调用 flask_apscheduler 的 api (推荐) 实例对象 scheduler 拥有增、删

    2024年01月21日
    浏览(35)
  • 基于Mongodb分布式锁简单实现,解决定时任务并发执行问题

    我们日常开发过程,会有一些定时任务的代码来统计一些系统运行数据,但是我们应用有需要部署多个实例,传统的通过配置文件来控制定时任务是否启动又太过繁琐,而且还经常出错,导致一些异常数据的产生 网上有很多分布式锁的实现方案,基于redis、zk、等有很多,但

    2023年04月18日
    浏览(35)
  • GPTs的创建与使用,自定义GPTs中的Actions示例用法 定义和执行特定任务的功能模块 通过API与外部系统或服务的交互

    Logo:自动生成 Name 介绍 Description 介绍 Instructions 要求或命令等 比如用中文回复,角色。 Knowledge 上传你的知识库,如果你有某一垂直行业的数据,基于数据来回答。比如我有某个芯片的指令集。 Capabilities 都要 Actions:就这个难以理解一点,下面详说含义用法。 Addtional Setting

    2024年02月04日
    浏览(31)
  • 【运维】Linux定时任务 定时执行脚本

    五分钟执行一次sh脚本 进入编辑页面 crontab -e 按Insert   进行编辑  # 每两分钟执行一次 */2 * * * * /usr/local/start.sh 依次按 :wq 进行保存  即时生效 重启 #设定crond服务为开机自启动 接下来,在介绍 crontab 命令。该命令和 at 命令类似,也是通过 /etc/cron.allow 和 /etc/cron.deny 文件来限

    2024年02月10日
    浏览(34)
  • Crontab(定时任务)使用: Linux-Centos7使用crontab制定定时任务,定时执行某任务

    参考:https://blog.csdn.net/m0_49605975/article/details/120701771 1.用yum命令安装Crontab 2.启动,关闭,重启 3.设置开机启动 1.设置定时任务-进入编辑模式 -和vim操作一至 2.查看定时任务列表 3.添加定时任务 样例: 添加一个定时任务,定时清空某个文件夹里面日志文件的内容 3.1 编写一个清

    2024年02月01日
    浏览(60)
  • Ubuntu定时执行任务

    cron一个Linux定时执行工具,可以定时执行一些任务。 如果显示“no crontab for xxx” 说明没有启动cron。 这样就启动cron了。 服务相关命令: 查看当前定时任务: 添加修改删除定时任务: crontab最后一行,提示添加定时任务的格式: 示例:每天8点,执行test.sh. 示例:每5分钟,写

    2024年02月06日
    浏览(39)
  • @Scheduled 定时任务不执行

    启动类上加 @EnableScheduling 注解 定时任务类上加@Component 定时方法上加@Scheduled 解决:进行try…catch异常抛出 原因是: @Scheduled注解会在默认情况下以单线程的方式执行定时任务。 这个“单线程”指两个方面: 如果一个定时任务执行时间大于其任务间隔时间,那么下一次将会等

    2024年02月05日
    浏览(63)
  • 【openWrt】设置执行定时任务

    遇到一个问题,使用openWrt软路由搭建服务器,在docker装了一个maccmsV10,需要每天执行cj信息定时任务,但是maccmsV10本身不支持执行定时任务的配置的。  看了下,openWrt是支持本身是linux系统,所以是可以设置定时任务的。只需要装了cron服务。 设置计划任务,保存 重启cron服务

    2024年02月16日
    浏览(59)
  • 使用shedlock实现分布式定时任务锁【防止task定时任务重复执行】

    第一步:引入shedlock相关依赖 ShedLock还可以使用Mongo,Redis,Hazelcast,ZooKeeper等外部存储进行协调,例如使用redis则引入下面的包 第二步:创建数据库表结构,数据库表的脚本如下: 第三步:添加shedlock配置类 (定时任务防重复执行的配置类) 第四步:在启动类上添加启动注

    2024年02月10日
    浏览(34)
  • linux-crontab每分钟定时执行/定时任务调度

    本文讲解linux上如何调用定时任务,如每分钟打印日志,每日24点执行日志切割脚本等等。 在Linux系统中,crontab命令是一个用于执行定时任务的命令, crond(crontab)是系统默认自带的定时服务 。我们可以通过编辑crontab文件来设置定时任务,使系统可以自动按照设定的时间和频率

    2024年02月06日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包