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

Python程序暫停的正常處理方法

 更新時(shí)間:2019年11月07日 11:13:35   作者:Mein_Augenstern  
這篇文章主要介紹了Python程序暫停的實(shí)現(xiàn)代碼,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

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

如果用sleep() 進(jìn)程將阻塞

假設(shè)進(jìn)程下有兩個(gè)線程 那么這兩個(gè)線程會(huì)繼續(xù)運(yùn)行

要使進(jìn)程掛起 可以考慮使用psutil

import psutil
p = psutil.Process(pid)
p.suspend()  #掛起進(jìn)程
p.resume()  #恢復(fù)進(jìn)程

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


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

測(cè)試程序

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 '進(jìn)程掛起 %s' %ctime()
  sleep(5)
  wake(p.pid)
  print '喚醒進(jìn)程 %s' %ctime()
def stop(pid):
    print '進(jìn)程暫停 進(jìn)程編號(hào) %s ' %(pid)
    p = psutil.Process(pid)
    p.suspend()
def wake(pid):
    print '進(jìn)程恢復(fù) 進(jìn)程編號(hào) %s ' %(pid)
    p = psutil.Process(pid)
    p.resume()
if __name__ == '__main__':
  main()

結(jié)果:

當(dāng)前運(yùn)行進(jìn)程PID : 3096
寫者進(jìn)程等待中 編號(hào): Thread-2
開始寫 編號(hào):Thread-2 現(xiàn)在時(shí)間是: Mon Nov 30 21:12:12 2015
讀者進(jìn)程等待中,編號(hào)Thread-1
寫者進(jìn)程等待中 編號(hào): Thread-4
進(jìn)程阻塞
寫者進(jìn)程等待中 編號(hào): Thread-6
寫者進(jìn)程等待中 編號(hào): Thread-8
寫者進(jìn)程等待中 編號(hào): Thread-10
進(jìn)程暫停 進(jìn)程編號(hào) 3096
進(jìn)程掛起 Mon Nov 30 21:12:15 2015
進(jìn)程恢復(fù) 進(jìn)程編號(hào) 3096
喚醒進(jìn)程 Mon Nov 30 21:12:20 2015
結(jié)束寫 編號(hào): Thread-2 現(xiàn)在時(shí)間是 Mon Nov 30 21:12:20 2015
寫者進(jìn)程等待中 編號(hào): Thread-2
開始讀 , 讀者編號(hào) Thread-1 ,現(xiàn)在時(shí)間是 Mon Nov 30 21:12:20 2015
開始讀 , 讀者編號(hào) Thread-3 ,現(xiàn)在時(shí)間是 Mon Nov 30 21:12:20 2015
開始讀 , 讀者編號(hào) Thread-5 ,現(xiàn)在時(shí)間是 Mon Nov 30 21:12:20 2015
開始讀 , 讀者編號(hào) Thread-7 ,現(xiàn)在時(shí)間是 Mon Nov 30 21:12:20 2015
開始讀 , 讀者編號(hào) Thread-9 ,現(xiàn)在時(shí)間是 Mon Nov 30 21:12:20 2015
完成讀 , 讀者編號(hào) Thread-1 , 現(xiàn)在時(shí)間是 Mon Nov 30 21:12:22 2015
完成讀 , 讀者編號(hào) Thread-3 , 現(xiàn)在時(shí)間是 Mon Nov 30 21:12:22 2015
完成讀 , 讀者編號(hào) Thread-5 , 現(xiàn)在時(shí)間是 Mon Nov 30 21:12:22 2015
完成讀 , 讀者編號(hào) Thread-7 , 現(xiàn)在時(shí)間是 Mon Nov 30 21:12:22 2015

總結(jié)

以上所述是小編給大家介紹的Python程序暫停的正常處理方法,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!

相關(guān)文章

最新評(píng)論

都江堰市| 错那县| 谷城县| 宁远县| 张家川| 新蔡县| 庄浪县| 新乐市| 丽水市| 岳西县| 舞阳县| 双桥区| 陆丰市| 崇阳县| 嘉鱼县| 慈利县| 林州市| 乐安县| 砀山县| 洮南市| 邢台市| 九龙城区| 阳曲县| 阿拉善左旗| 民丰县| 邢台县| 同江市| 承德市| 扶余县| 林芝县| 东安县| 寻乌县| 鄂尔多斯市| 黄浦区| 峨边| 丹巴县| 淮北市| 宕昌县| 聊城市| 靖宇县| 那坡县|