当前位置: 首页 > 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,但是又发现,定时任务执行信号的发起,一定是和时间挂钩的,所以可能无法被避免掉,如果看到本文的兄弟有更好的方案,可以私信互相学习一下。

相关文章:

  • 企业网站建设任务书seo手机关键词网址
  • 企业邮箱格式怎么填写才正确关键词seo公司推荐
  • 自己网站服务器无锡网站推广公司
  • 家用电脑和宽带做网站南昌百度搜索排名优化
  • 如何建设一个子网站关键词优化公司排名榜
  • 网站排名怎么上去今日新闻头条
  • 使用 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 之作