网易首页 > 网易号 > 正文 申请入驻

Python 多线程小技巧:比 time.sleep 更好用的暂停写法!

0
分享至

剧照:凡人修仙传

作者:kingname

来源:未闻Code

我们知道,在 Python 里面可以使用time.sleep来让代码暂停一段时间,例如:

import time

print('...部分代码...')
time.sleep(5)
print('...剩下的代码...')

程序首先打印出...部分代码...,然后等待5秒钟,再打印出...剩下的代码...

现在大家想一想,有没有什么办法,在不使用time.sleep的情况下,让程序暂停5秒?

你可能会说,用requests访问一个延迟5秒的网址、或者用递归版算法计算斐波那契数列第36位……这些奇技淫巧。

不过今天我说的,是另外一个东西,threading模块里面的Event

我们来看看它的用法:

import threading

event = threading.Event()
print('...部分代码...')
event.wait(5)
print('...剩下的代码...')

这样一来,程序首先打印出...部分代码...,然后等待5秒钟,再打印出...剩下的代码...

功能看起来跟time.sleep没什么区别,那为什么我要特别提到它呢?因为在多线程里面,它比time.sleep更有用。我们来看一个例子:

import threading

class Checker(threading.Thread):
def __init__(self, event):
super().__init__()
self.event = event

def run(self):
while not self.event.is_set():
print('检查 redis 是否有数据')
time.sleep(60)

trigger_async_task()
event = threading.Event()
checker = Checker(event)
checker.start()
if user_cancel_task():
event.set()

我来解释一下这段代码的意思。在主线程里面,我调用trigger_async_task()触发了一个异步任务。这个任务多久完成我并不清楚。但是这个任务完成以后,它会往 Redis 里面发送一条消息,只要 Redis 有这个消息了,我就知道它完成了。所以我要创建一个 checker 子线程,每60秒去 Redis里面检查任务是否完成。如果没有完成,就暂停60秒,然后再检查。

但某些情况下,我不需要等待了,例如用户主动取消了任务。这个时候,我就想提前结束这个 checker 子线程。

但是我们知道,线程是不能从外面主动杀死的,只能让它自己退出。所以当我执行event.set()后,子线程里面self.event.is_set()就会返回 False,于是这个循环就不会继续执行了。

可是,如果某一轮循环刚刚开始,我在主线程里面调用了event.set()。此时,子线程还在time.sleep中,那么子线程需要等待60秒才会退出。

但如果我修改一下代码,使用self.event.wait(60)

import threading

class Checker(threading.Thread):
def __init__(self, event):
super().__init__()
self.event = event

def run(self):
while not self.event.is_set():
print('检查 redis 是否有数据')
self.event.wait(60)

trigger_task()
event = threading.Event()
checker = Checker(event)
checker.start()
if user_cancel_task():
event.set()

那么,即便self.event.wait(60)刚刚开始阻塞,只要我在主线程中执行了event.set(),子线程里面的阻塞立刻就会结束。于是子线程立刻就会结束。不需要再白白等待60秒。

并且,event.wait()这个函数在底层是使用 C 语言实现的,不受 GIL 锁的干扰。

猫注:原文标题《一日一技:除了time.sleep,你还有一个暂停代码的方法》

Python猫技术交流群开放啦!群里既有国内一二线大厂在职员工,也有国内外高校在读学生,既有十多年码龄的编程老鸟,也有中小学刚刚入门的新人,学习氛围良好!想入群的同学,请在公号内回复『交流群』,获取猫哥的微信 (谢绝广告党,非诚勿扰!)~

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
WTT太原赛:国乒女单全军覆没!日本包揽冠亚军,削球手3连胜国乒

WTT太原赛:国乒女单全军覆没!日本包揽冠亚军,削球手3连胜国乒

全言作品
2026-04-11 17:40:43
风向突变,以德为首的西方国家齐发声:中国已在换电关键领域崛起

风向突变,以德为首的西方国家齐发声:中国已在换电关键领域崛起

独舞独舞
2026-04-11 18:31:26
当下就业最难的专业,清华毕业都哭诉找不到工作!

当下就业最难的专业,清华毕业都哭诉找不到工作!

黯泉
2026-04-11 15:03:59
超级大招落地!下周一A股这几大板块很可能暴涨,这几个方向或凉透

超级大招落地!下周一A股这几大板块很可能暴涨,这几个方向或凉透

股市皆大事
2026-04-11 14:46:09
李玮锋执教宁波队遭遇“开门黑”

李玮锋执教宁波队遭遇“开门黑”

北青网-北京青年报
2026-04-11 18:48:11
让女生真正高潮的,从来不是横冲直撞,而是这3个温柔点!

让女生真正高潮的,从来不是横冲直撞,而是这3个温柔点!

樱桃小丸子1987
2026-04-11 14:38:27
住院时儿媳全程陪护,出院当天女儿拿来文件:爸,你看看这个

住院时儿媳全程陪护,出院当天女儿拿来文件:爸,你看看这个

纸鸢奇谭
2026-03-31 10:40:50
1分硬币拍出9650元!这个年份老1分硬币,谁有就发了

1分硬币拍出9650元!这个年份老1分硬币,谁有就发了

小陈收藏社
2026-04-11 12:09:17
曾志伟追债20多年终获胜!讨回5700万,还债人居然是她,令人意外

曾志伟追债20多年终获胜!讨回5700万,还债人居然是她,令人意外

一盅情怀
2026-04-11 17:12:15
WTT太原赛:国乒女单全军覆没,日本包揽冠亚军

WTT太原赛:国乒女单全军覆没,日本包揽冠亚军

吴朑爱游泳
2026-04-11 18:30:20
关于两岸和平统一,郑丽文做出回应!岛内蒋万安的表态,让人失望

关于两岸和平统一,郑丽文做出回应!岛内蒋万安的表态,让人失望

生活魔术专家
2026-04-11 13:13:12
中国学霸赴美沦为妓女,嫁给白人赌鬼,说美国是世界上最棒的国家

中国学霸赴美沦为妓女,嫁给白人赌鬼,说美国是世界上最棒的国家

萧鮖记录风土人情
2026-04-09 19:33:39
特朗普在匈牙利选战最后时刻力挺欧尔班

特朗普在匈牙利选战最后时刻力挺欧尔班

参考消息
2026-04-11 19:52:15
为了对抗中国车企的极致效率,丰田不再为“看不见的完美”买单

为了对抗中国车企的极致效率,丰田不再为“看不见的完美”买单

澎湃新闻
2026-04-10 19:34:06
伊朗媒体:伊朗准备对以色列开展“威慑行动”

伊朗媒体:伊朗准备对以色列开展“威慑行动”

澎湃新闻
2026-04-08 23:05:04
1-1!姆巴佩遭点球争议,巴尔韦德难救主,皇马连续3场不胜

1-1!姆巴佩遭点球争议,巴尔韦德难救主,皇马连续3场不胜

我的护球最独特
2026-04-11 05:04:38
"翻脸"是迟早的事?王濛怒甩李小冉当众黑脸,内娱恶俗一幕被揭开

"翻脸"是迟早的事?王濛怒甩李小冉当众黑脸,内娱恶俗一幕被揭开

离离言几许
2026-04-11 15:21:33
iPhone Ultra 售价曝光,国行起售价 17,999 !

iPhone Ultra 售价曝光,国行起售价 17,999 !

XCiOS俱乐部
2026-04-09 13:52:43
复旦大学研究:我国财政供养人员6846万,其中退休人员占四成!

复旦大学研究:我国财政供养人员6846万,其中退休人员占四成!

黯泉
2026-04-09 17:27:59
夏天神器来了!徕芬首款折叠小风扇官宣 轻松装入口袋

夏天神器来了!徕芬首款折叠小风扇官宣 轻松装入口袋

快科技
2026-04-11 16:55:16
2026-04-11 20:31:00
Python猫 incentive-icons
Python猫
人生苦短,我用Python。博客:https://pythoncat.top
729文章数 8120关注度
往期回顾 全部

科技要闻

半夜被燃烧瓶砸醒,OpenAI CEO发文反思

头条要闻

美国否认同意解冻伊朗资产 巴官员:美方急了 伊朗不急

头条要闻

美国否认同意解冻伊朗资产 巴官员:美方急了 伊朗不急

体育要闻

换帅之后,他们从降级区冲到升级区

娱乐要闻

浪姐7淘汰 该走的没走,不该走的走了

财经要闻

从日本翻身看:这次谁能扛住高油价?

汽车要闻

焕新极氪007/007GT上市 限时19.39万起

态度原创

时尚
房产
健康
游戏
公开课

这件人生单品,现在正是穿它的黄金期

房产要闻

土地供应突然暴跌!2026海口楼市,格局大变!

干细胞抗衰4大误区,90%的人都中招

《星砂岛》小游戏侵权俄罗斯方块 已从Steam下架

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版