最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python多線程中比time.sleep更好用的暫停方式

 更新時間:2024年02月18日 16:53:15   作者:沒有刺的仙人掌  
這篇文章主要介紹了Python多線程中比time.sleep更好用的暫停方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

Python多線程比time.sleep更好用的暫停

在python代碼中,如果需要程序暫停一段時間,通常情況下使用的是time.sleep()方法。

示例代碼:

import time
 
print('...部分代碼...')
time.sleep(3)
print('...剩下的代碼...')

運行結(jié)果:

在多線程中,還有另外一種方法,threading模塊中的Event。

示例代碼:

import threading
 
event = threading.Event()
print('...部分代碼...')
event.wait(3)
print('...剩下的代碼...')

運行結(jié)果:

使用event()方法,首先先打印,然后等待3秒,再繼續(xù)執(zhí)行后面的程序。

以上看起來和time.sleep()方法類似

接下來看一些例子來展示event()的好處

示例代碼:

import threading
import time
 
 
class Checker(threading.Thread):
    def __init__(self, event):
        super().__init__()
        self.event = event
 
    def run(self) -> None:
        while not self.event.is_set():
            print("進行檢查某個任務(wù)狀態(tài)!")
            time.sleep(50)
 
 
# 某個異步任務(wù)
# async_task()
event = threading.Event()
checker = Checker(event)
checker.start()
 
# 異步任務(wù)檢查
# if user_cancel_task():
#     event.set()

運行結(jié)果:

但是在某種情況下,如果主動取消任務(wù),就不需要等待,這個時候就需要結(jié)束Checker這個子線程了。

線程是不能從外面主動殺死的,只能讓它自己退出。當執(zhí)行event.set()后,子線程里面self.event.is_set()就會返回 False,于是這個循環(huán)就不會繼續(xù)執(zhí)行了。

可是,如果某一輪循環(huán)剛剛開始,我在主線程里面調(diào)用了event.set()。此時,子線程還在time.sleep中,那么子線程需要等待50秒才會退出。這是就可以體現(xiàn)出event()的好處了。使用self.event.wait(60)。

示例代碼:

import threading
 
 
class Checker(threading.Thread):
    def __init__(self, event):
        super().__init__()
        self.event = event
 
    def run(self) -> None:
        while not self.event.is_set():
            print("進行檢查某個任務(wù)狀態(tài)!")
            self.event.wait(50)
 
 
# 某個異步任務(wù)
# async_task()
event = threading.Event()
checker = Checker(event)
checker.start()
 
# 異步任務(wù)檢查
# if user_cancel_task():
#     event.set()

運行結(jié)果:

即便self.event.wait(50)剛剛開始阻塞,只要我在主線程中執(zhí)行了event.set(),子線程里面的阻塞立刻就會結(jié)束。

于是子線程立刻就會結(jié)束。不需要再白白等待50秒。

并且,event.wait()這個函數(shù)在底層是使用 C 語言實現(xiàn)的,不受 GIL 鎖的干擾。

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論

阿拉尔市| 上饶市| 南陵县| 东城区| 日喀则市| 五大连池市| 普宁市| 依安县| 龙山县| 工布江达县| 大竹县| 卓尼县| 陆良县| 新化县| 英山县| 万安县| 大丰市| 民丰县| 南澳县| 邹城市| 新郑市| 永清县| 尖扎县| 佛冈县| 青阳县| 外汇| 固原市| 洪雅县| 延寿县| 盈江县| 青阳县| 余庆县| 东宁县| 阳江市| 和顺县| 梁河县| 汾阳市| 郑州市| 望谟县| 鄯善县| 万荣县|