IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Python的time.sleep() 和 apscheduler定时任务的区别 -> 正文阅读

[Python知识库]Python的time.sleep() 和 apscheduler定时任务的区别

apscheduler是用的threading里的wait()与sleep()区别就是

sleep()等完一个DELAY,且没有释放锁。

wait()是一个while根据flag等于true或false决定是否阻塞,wait()方法会释放锁,当另外一个线程使用 notify() or notify_all()唤醒它之前会一直阻塞。一旦被唤醒,wait()会重新获得锁并返回。

wait()使用场景就是可能多线程a炒菜b切菜 需要等待一下b切好,a能拿到,做一个同步什么的

?sleep()就是没其他代码需要配合等完就完事了,或者其他的代码在其他线程跑跟这个没有交互

而显然用定时任务框架和用time.sleep()的区别就是? 需求复杂度的问题,如果需要周期性定时任务或者对任务进行一些管理调度就用框架,一个循环+sleep重复执行就能满足需求就不用。

--------------------------------------------------

最近在优化项目,之前很多练手的爬虫想用定时任务重新做一下,但是因为学习python的时候并没有学习到定时任务框架,现在用到了就自己学习了一下,研究了一下time.sleep() 和 apscheduler定时任务的区别,发出来做个笔记

大概的需求是这样

有一些个账号存在list里,每天(每个固定周期)遍历一遍这个list里所有账号,调用方法爬取对应数据

这里可以用time.sleep()加 多线程threading模块实现定时任务

也可以使用如 apscheduler 这种定时任务框架实现,当然要做同步就实现一下消息队列这里不扩展,我先想了解一下apscheduler底层是用的什么呢 是怎么实现的

APScheduler 支持三种调度任务:固定时间间隔,固定的某个时间点(日期),Linux下Crontab 命令(cron表达式)。同时,它还支持异步执行、后台执行调度任务。

暂时先看了一下最常用的两种调度类型BlockingScheduler与BackgroundScheduler

BlockingScheduler会阻塞主线程BackgroundScheduler则不会

也就是说

 scheduler.start()

后的代码会不会运行的意思

然后我们测了一下任务的进程ID都相同,但线程ID不同。所以,APScheduler是以线程的方式实现调度执行的。

好那最后的问题就是APScheduler的BlockingScheduler调度方式的底层原理与time.sleep()的区别

点开BlockingScheduler的源码,可以看到start是实现了一个 Event事件,继续往下看可以看到这个事件的wait()方法会一直阻塞,直到标记被删除。最后就可以看到,是用的threading.Event的wait(),这与使用time.sleep()的区别是

wait(),设置exit_flag.wait(timeout=DELAY)可以立即脱离while循环。就是说wait()释放了锁使得其他线程可以使用同步控制块或者方法。

而使用time.sleep不释放锁,即使在设置了事件之后,也要在time.sleep调用中等待,直到您睡眠了DELAY秒。?

显然虽然使用wait需要频繁地重新获取GIL可能比睡满DELAY需要更多的CPU,但它的好处是更具响应性。?

而BackgroundScheduler继承于BlockingScheduler,只不过BackgroudScheduler执行轮询的操作时单开了一个线程,因此不会阻塞主程序的运行。

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-05-11 16:25:25  更:2022-05-11 16:26:39 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 13:50:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码