亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

python 線程的暫停, 恢復, 退出詳解及實例

 更新時間:2016年12月06日 11:52:20   作者:scolia  
這篇文章主要介紹了python 線程的暫停, 恢復, 退出詳解及實例的相關資料,需要的朋友可以參考下

python 線程 暫停, 恢復, 退出

我們都知道python中可以是threading模塊實現多線程, 但是模塊并沒有提供暫停, 恢復和停止線程的方法, 一旦線程對象調用start方法后, 只能等到對應的方法函數運行完畢. 也就是說一旦start后, 線程就屬于失控狀態(tài). 不過, 我們可以自己實現這些. 一般的方法就是循環(huán)地判斷一個標志位, 一旦標志位到達到預定的值, 就退出循環(huán). 這樣就能做到退出線程了. 但暫停和恢復線程就有點難了, 我一直也不清除有什么好的方法, 直到我看到threading中Event對象的wait方法的描述時.

wait([timeout])

  Block until the internal flag is true. If the internal flag is true on entry, return immediately. Otherwise, block until another thread calls set() to set the flag to true, or until the optional timeout occurs.

  阻塞, 直到內部的標志位為True時. 如果在內部的標志位在進入時為True時, 立即返回. 否則, 阻塞直到其他線程調用set()方法將標準位設為True, 或者到達了可選的timeout時間.


  When the timeout argument is present and not None, it should be a floating point number specifying a timeout for the operation in seconds (or fractions thereof).

  This method returns the internal flag on exit, so it will always return True except if a timeout is given and the operation times out.

  當給定了timeout參數且不為None, 它應該是一個浮點數,以秒為單位指定操作的超時(或是分數)。

  此方法在退出時返回內部標志,因此除非給定了超時且操作超時,否則它將始終返回True。


  Changed in version 2.7: Previously, the method always returned None.

  2.7版本以前, 這個方法總會返回None.


  利用wait的阻塞機制, 就能夠實現暫停和恢復了, 再配合循環(huán)判斷標識位, 就能實現退出了, 下面是代碼示例:

#!/usr/bin/env python
# coding: utf-8

import threading
import time


class Job(threading.Thread):

  def __init__(self, *args, **kwargs):
    super(Job, self).__init__(*args, **kwargs)
    self.__flag = threading.Event()   # 用于暫停線程的標識
    self.__flag.set()    # 設置為True
    self.__running = threading.Event()   # 用于停止線程的標識
    self.__running.set()   # 將running設置為True

  def run(self):
    while self.__running.isSet():
      self.__flag.wait()   # 為True時立即返回, 為False時阻塞直到內部的標識位為True后返回
      print time.time()
      time.sleep(1)

  def pause(self):
    self.__flag.clear()   # 設置為False, 讓線程阻塞

  def resume(self):
    self.__flag.set()  # 設置為True, 讓線程停止阻塞

  def stop(self):
    self.__flag.set()    # 將線程從暫停狀態(tài)恢復, 如何已經暫停的話
    self.__running.clear()    # 設置為False  

下面是測試代碼:

a = Job()
a.start()
time.sleep(3)
a.pause()
time.sleep(3)
a.resume()
time.sleep(3)
a.pause()
time.sleep(2)
a.stop()

測試的結果:

 

  這完成了暫停, 恢復和停止的功能. 但是這里有一個缺點: 無論是暫停還是停止, 都不是瞬時的, 必須等待run函數內部的運行到達標志位判斷時才有效. 也就是說操作會滯后一次.

  但是這有時也不一定是壞事. 如果run函數中涉及了文件操作或數據庫操作等, 完整地運行一次后再退出, 反而能夠執(zhí)行剩余的資源釋放操作的代碼(例如各種close). 不會出現程序的文件操作符超出上限, 數據庫連接未釋放等尷尬的情況.

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關文章

  • Python如何使用pymongo連接MongoDB數據庫并進行相關操作

    Python如何使用pymongo連接MongoDB數據庫并進行相關操作

    PyMongo是驅動程序,使python程序能夠使用Mongodb數據庫,使用python編寫而成,下面這篇文章主要給大家介紹了關于Python如何使用pymongo連接MongoDB數據庫并進行相關操作的相關資料,需要的朋友可以參考下
    2023-05-05
  • Django之choices選項和富文本編輯器的使用詳解

    Django之choices選項和富文本編輯器的使用詳解

    這篇文章主要介紹了Django之choices選項和富文本編輯器的使用詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • Python?pyinstaller打包exe最新完整圖文教程

    Python?pyinstaller打包exe最新完整圖文教程

    pyinstaller是一個非常簡單的打包python的py文件的庫,下面這篇文章主要給大家介紹了關于Python?pyinstaller打包exe的相關資料,文中介紹的非常詳細,需要的朋友可以參考下
    2023-12-12
  • Python中Numpy模塊使用詳解

    Python中Numpy模塊使用詳解

    這篇文章主要介紹了Python中Numpy模塊使用詳解,NumPy是Python 的一個擴展程序庫,支持大量的維度數組與矩陣運算。更多相關內容需要的朋友可以參考一下
    2022-07-07
  • python 回溯法模板詳解

    python 回溯法模板詳解

    今天小編就為大家分享一篇python 回溯法模板詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • python使用點操作符訪問字典(dict)數據的方法

    python使用點操作符訪問字典(dict)數據的方法

    這篇文章主要介紹了python使用點操作符訪問字典(dict)數據的方法,涉及Python操作字典的技巧,需要的朋友可以參考下
    2015-03-03
  • 使用python實現定時報天氣的示例代碼

    使用python實現定時報天氣的示例代碼

    本文主要介紹了使用python實現定時報天氣,只需要讓爬蟲程序每天自動為你發(fā)送,下面就詳細的介紹一下如何使用,感興趣的可以了解一下
    2021-11-11
  • 利用Python循環(huán)(包括while&for)各種打印九九乘法表的實例

    利用Python循環(huán)(包括while&for)各種打印九九乘法表的實例

    下面小編就為大家?guī)硪黄肞ython循環(huán)(包括while&for)各種打印九九乘法表的實例。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧,希望對大家有所幫助
    2017-11-11
  • Python按要求從多個txt文本中提取指定數據的代碼示例

    Python按要求從多個txt文本中提取指定數據的代碼示例

    本文給大家介紹了Python如何按要求從多個txt文本中提取指定數據,遍歷文件夾并從中找到文件名稱符合我們需求的多個.txt格式文本文件,文中有相關的代碼示例供大家參考,具有一定的參考價值,需要的朋友可以參考下
    2023-12-12
  • Python實現的隨機森林算法與簡單總結

    Python實現的隨機森林算法與簡單總結

    這篇文章主要介紹了Python實現的隨機森林算法,結合實例形式詳細分析了隨機森林算法的概念、原理、實現技巧與相關注意事項,需要的朋友可以參考下
    2018-01-01

最新評論