当前位置: 首页 > news >正文

python定时调度升级

几年前其实有写过python定时调度的简易写法,比较简单直观。但是没有解决time.sleep有时会出现无法被唤醒的情况。time.sleep出现无法被唤醒的原因是在单线程中,资源由于被别的调度任务占用,所以会导致time.sleep任务异常。所以在使用time.sleep时,会建议单独起一个线程资源来执行time.sleep任务。解决方案如下:

import threading
import time
event = threading.Event()
def create_time():
    while True:
        # lock.acquire()
        time.sleep(3)
        event.set()
        # lock.release()

def use_data():
    while True:
        # lock.acquire()
        event.wait()
        print(time.time())
        print(threading.activeCount())
        print(threading.current_thread())
        event.clear()
        # lock.release()

t = threading.Thread(target=create_time)
t1 = threading.Thread(target=use_data)
t.start()
t1.start()

逻辑中被注释掉的部分,是用线程锁来实现的,同样可以解决调度任务,是没有问题的。在前边的文章中,其实还有提到使用队列来实现调度任务。这套解决方案的本质其实就还是信号方式。一边在计时,另外一边在等待信号,当接收到信号后,开始执行任务。目前从理论上来讲,一直想要替换掉time.sleep,但是又发现,定时任务执行信号的发起,一定是和时间挂钩的,所以可能无法被避免掉,如果看到本文的兄弟有更好的方案,可以私信互相学习一下。

http://www.dtcms.com/a/100548.html

相关文章:

  • 使用 Ansys Discovery 可视化液体池中的水流
  • ES拼音分词自动补全实现
  • LLMs之PE:《Tracing the thoughts of a large language model》翻译与解读
  • 单例模式解析
  • 畅享电脑流畅运行:深度卸载、智能监视与空间释放
  • JS绘制叠加图片
  • 04_SQL概述及DDL
  • docker镜像拉取失败
  • Foldseek快速蛋白质结构比对
  • 计算机组成原理笔记(八)——2.4十进制和数串的表示
  • D4RL库的安装历程及成功经验
  • Golang并发编程:Data Race检测与解决方案
  • Qt非阻塞延时实现
  • 基于 GEE 的区域降水数据可视化:从数据处理到等值线绘制
  • java连接opcua
  • 关于单片机IAP升级的那点事儿|智能设置中断向量表
  • PyTorch单机多卡训练(DataParallel)
  • 人工智能通识速览一(神经网络)(编辑中)
  • mysql中将外部文本导入表中过程出现的错误及解决方法
  • VITA 模型解读,实时交互式多模态大模型的 pioneering 之作
  • 【Flutter学习(1)】Dart访问控制
  • 【微机及接口技术】- 第三章 8086 汇编语言程序设计(汇编指令与汇编程序设计)下
  • iptables学习记录
  • Java基础-23-静态变量与静态方法的使用场景
  • 2025年3月29日笔记
  • 漏洞挖掘---顺景ERP-GetFile任意文件读取漏洞
  • PyTorch DDP流程和SyncBN、ShuffleBN
  • 利用 PCI-Express 交换机实现面向未来的推理服务器
  • 消费品行业创新创业中品类创新与数字化工具的融合:以开源 AI 智能客服、AI 智能名片及 S2B2C 商城小程序为例
  • IDApro直接 debug STM32 MCU