中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python程序暫停的示例分析

發布時間:2021-08-11 10:07:23 來源:億速云 閱讀:177 作者:小新 欄目:開發技術

這篇文章將為大家詳細講解有關Python程序暫停的示例分析,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

將進程掛起(Suspend) 而非 阻塞(Block)

如果用sleep() 進程將阻塞

假設進程下有兩個線程 那么這兩個線程會繼續運行

要使進程掛起 可以考慮使用psutil

import psutil
p = psutil.Process(pid)
p.suspend()  #掛起進程
p.resume()  #恢復進程

為了證明效果 我寫了一個簡單的進程Process
其下有兩個線程 讀者Reader 和 寫者Writer(簡單的讀者寫者問題)

Process:
import threading
from time import ctime, sleep
import ThreadInReadAndWriteProblem
import multiprocessing
import os
class Process(multiprocessing.Process):  
  def __init__(self):
    multiprocessing.Process.__init__(self) #手動實現父類
    pid = os.getpid()
  def run(self):
    print '當前運行進程PID : %s ' %self.pid  #子線程的id與父進程的pid相同 屬于 同一個進程
    for i in range(0,5):
      r = ThreadInReadAndWriteProblem.Reader()
      w = ThreadInReadAndWriteProblem.Writer()
      w.start()
      r.start()
 print '進程阻塞'
    sleep(10)  #總共運行時間10秒
Reader&Writer
import threading
from time import ctime, sleep
import os
mutex = threading.Lock()  #互斥鎖 
mutex_readercount = threading.Lock() #計數時的互斥 計算當前正在讀的數目
readerCount = 0 number = 0
#不滿足條件的 進入阻塞狀態
class Reader(threading.Thread):    #讀者
  def __init__(self):
    threading.Thread.__init__(self) #繼承父類構造函數
  def run(self):
    global mutex
    global readerCount
    #print '線程PID: %s ' %os.getpid()
    while True:
       mutex_readercount.acquire()
       readerCount +=1
       if readerCount == 1:
         print '讀者進程等待中,編號%s' %(self.name)
         mutex.acquire() == False   # 第一個需要申請
       mutex_readercount.release()
       print '開始讀 , 讀者編號 %s ,現在時間是 %s' %(self.name,ctime())
       sleep(2)
       print '完成讀 , 讀者編號 %s , 現在時間是 %s' %(self.name,ctime())
       mutex_readercount.acquire()
       readerCount -= 1
       if readerCount == 0:  #所有讀者均完成
          print '最后一個讀者完成讀 '
          mutex.release()
       mutex_readercount.release()
class Writer(threading.Thread):   #寫者
  def __init__(self):
    threading.Thread.__init__(self)
  def run(self):
    global mutex
    global writerCount
    #print '線程PID: %s' %os.getpid()
    while True:
      print '寫者進程等待中 編號: %s' %(self.name)
      mutex.acquire()       
      print '開始寫 編號:%s 現在時間是: %s ' %(self.name,ctime())
      sleep(5)
      print '結束寫 編號: %s 現在時間是 %s' %(self.name,ctime())
      mutex.release()

測試程序

import ThreadInReadAndWriteProblem
import SingleProcessSchedulerMultiprocess
import psutil
import Scheduler
from time import ctime, sleep
def main():
  p = SingleProcessSchedulerMultiprocess.Process()
  p.start()
  sleep(3)
  stop(p.pid)
  print '進程掛起 %s' %ctime()
  sleep(5)
  wake(p.pid)
  print '喚醒進程 %s' %ctime()
def stop(pid):
    print '進程暫停 進程編號 %s ' %(pid)
    p = psutil.Process(pid)
    p.suspend()
def wake(pid):
    print '進程恢復 進程編號 %s ' %(pid)
    p = psutil.Process(pid)
    p.resume()
if __name__ == '__main__':
  main()

結果:

當前運行進程PID : 3096
寫者進程等待中 編號: Thread-2
開始寫 編號:Thread-2 現在時間是: Mon Nov 30 21:12:12 2015
讀者進程等待中,編號Thread-1
寫者進程等待中 編號: Thread-4
進程阻塞
寫者進程等待中 編號: Thread-6
寫者進程等待中 編號: Thread-8
寫者進程等待中 編號: Thread-10
進程暫停 進程編號 3096
進程掛起 Mon Nov 30 21:12:15 2015
進程恢復 進程編號 3096
喚醒進程 Mon Nov 30 21:12:20 2015
結束寫 編號: Thread-2 現在時間是 Mon Nov 30 21:12:20 2015
寫者進程等待中 編號: Thread-2
開始讀 , 讀者編號 Thread-1 ,現在時間是 Mon Nov 30 21:12:20 2015
開始讀 , 讀者編號 Thread-3 ,現在時間是 Mon Nov 30 21:12:20 2015
開始讀 , 讀者編號 Thread-5 ,現在時間是 Mon Nov 30 21:12:20 2015
開始讀 , 讀者編號 Thread-7 ,現在時間是 Mon Nov 30 21:12:20 2015
開始讀 , 讀者編號 Thread-9 ,現在時間是 Mon Nov 30 21:12:20 2015
完成讀 , 讀者編號 Thread-1 , 現在時間是 Mon Nov 30 21:12:22 2015
完成讀 , 讀者編號 Thread-3 , 現在時間是 Mon Nov 30 21:12:22 2015
完成讀 , 讀者編號 Thread-5 , 現在時間是 Mon Nov 30 21:12:22 2015
完成讀 , 讀者編號 Thread-7 , 現在時間是 Mon Nov 30 21:12:22 2015

關于“Python程序暫停的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

朝阳市| 清涧县| 延津县| 板桥市| 上饶县| 江川县| 碌曲县| 长治县| 金川县| 原阳县| 任丘市| 江津市| 沂水县| 银川市| 吉安县| 白河县| 广灵县| 许昌县| 会东县| 正宁县| 嘉荫县| 湖南省| 祁连县| 木兰县| 红安县| 永胜县| 合水县| 五峰| 兴安盟| 宿迁市| 清流县| 蕉岭县| 章丘市| 穆棱市| 读书| 洛隆县| 临武县| 石楼县| 江油市| 昌图县| 乃东县|