| |
|
开发:
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则不会 也就是说
后的代码会不会运行的意思 然后我们测了一下任务的进程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执行轮询的操作时单开了一个线程,因此不会阻塞主程序的运行。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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年12日历 | -2024/12/27 19:37:54- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |