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

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

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

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

如果用sleep() 進程將阻塞

假設(shè)進程下有兩個線程 那么這兩個線程會繼續(xù)運行

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

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

為了證明效果 我寫了一個簡單的進程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) #手動實現(xiàn)父類
    pid = os.getpid()
  def run(self):
    print '當(dāng)前運行進程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() #計數(shù)時的互斥 計算當(dāng)前正在讀的數(shù)目
readerCount = 0 number = 0
#不滿足條件的 進入阻塞狀態(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 '讀者進程等待中,編號%s' %(self.name)
         mutex.acquire() == False   # 第一個需要申請
       mutex_readercount.release()
       print '開始讀 , 讀者編號 %s ,現(xiàn)在時間是 %s' %(self.name,ctime())
       sleep(2)
       print '完成讀 , 讀者編號 %s , 現(xiàn)在時間是 %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 現(xiàn)在時間是: %s ' %(self.name,ctime())
      sleep(5)
      print '結(jié)束寫 編號: %s 現(xiàn)在時間是 %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 '進程恢復(fù) 進程編號 %s ' %(pid)
    p = psutil.Process(pid)
    p.resume()
if __name__ == '__main__':
  main()

結(jié)果:

當(dāng)前運行進程PID : 3096
寫者進程等待中 編號: Thread-2
開始寫 編號:Thread-2 現(xiàn)在時間是: 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
進程恢復(fù) 進程編號 3096
喚醒進程 Mon Nov 30 21:12:20 2015
結(jié)束寫 編號: Thread-2 現(xiàn)在時間是 Mon Nov 30 21:12:20 2015
寫者進程等待中 編號: Thread-2
開始讀 , 讀者編號 Thread-1 ,現(xiàn)在時間是 Mon Nov 30 21:12:20 2015
開始讀 , 讀者編號 Thread-3 ,現(xiàn)在時間是 Mon Nov 30 21:12:20 2015
開始讀 , 讀者編號 Thread-5 ,現(xiàn)在時間是 Mon Nov 30 21:12:20 2015
開始讀 , 讀者編號 Thread-7 ,現(xiàn)在時間是 Mon Nov 30 21:12:20 2015
開始讀 , 讀者編號 Thread-9 ,現(xiàn)在時間是 Mon Nov 30 21:12:20 2015
完成讀 , 讀者編號 Thread-1 , 現(xiàn)在時間是 Mon Nov 30 21:12:22 2015
完成讀 , 讀者編號 Thread-3 , 現(xiàn)在時間是 Mon Nov 30 21:12:22 2015
完成讀 , 讀者編號 Thread-5 , 現(xiàn)在時間是 Mon Nov 30 21:12:22 2015
完成讀 , 讀者編號 Thread-7 , 現(xiàn)在時間是 Mon Nov 30 21:12:22 2015

總結(jié)

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

相關(guān)文章

  • Python與shell的3種交互方式介紹

    Python與shell的3種交互方式介紹

    這篇文章主要介紹了Python與shell的3種交互方式介紹,本文講解了os.system、os.popen、subprocess模塊等3種方法,需要的朋友可以參考下
    2015-04-04
  • python爬蟲beautifulsoup庫使用操作教程全解(python爬蟲基礎(chǔ)入門)

    python爬蟲beautifulsoup庫使用操作教程全解(python爬蟲基礎(chǔ)入門)

    這篇文章主要介紹了python爬蟲beautifulsoup庫使用操作全解(python爬蟲基礎(chǔ)入門),本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • Python使用matplotlib繪制動畫的方法

    Python使用matplotlib繪制動畫的方法

    這篇文章主要介紹了Python使用matplotlib繪制動畫的方法,涉及matplotlib模塊的常見使用技巧,需要的朋友可以參考下
    2015-05-05
  • python鼠標(biāo)繪圖附代碼

    python鼠標(biāo)繪圖附代碼

    這篇文章主要為大家介紹了python鼠標(biāo)繪圖的實現(xiàn)完整示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • python實現(xiàn)批量獲取指定文件夾下的所有文件的廠商信息

    python實現(xiàn)批量獲取指定文件夾下的所有文件的廠商信息

    這篇文章主要介紹了python實現(xiàn)批量獲取指定文件夾下的所有文件的廠商信息的方法,是非常實用的技巧,涉及到文件的讀寫與字典的操作等技巧,需要的朋友可以參考下
    2014-09-09
  • 淺談Tensorflow2對GPU內(nèi)存的分配策略

    淺談Tensorflow2對GPU內(nèi)存的分配策略

    本文主要介紹了Tensorflow2對GPU內(nèi)存的分配策略,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • 從安裝到應(yīng)用全面掌握Python與OpenCV的配置與高級功能(最新推薦)

    從安裝到應(yīng)用全面掌握Python與OpenCV的配置與高級功能(最新推薦)

    OpenCV的強大功能不僅限于基本的圖像處理,還可以擴展到實時視頻分析、復(fù)雜的圖像拼接和特征匹配等應(yīng)用場景,這篇文章主要介紹了從安裝到應(yīng)用全面掌握Python與OpenCV的配置與高級功能,需要的朋友可以參考下
    2024-08-08
  • 在CentOS6上安裝Python2.7的解決方法

    在CentOS6上安裝Python2.7的解決方法

    在CentOS6上yum安裝工具是基于Python2.6.6的,所以在CentOS6上默認安裝的是Python2.6.6,因為要在服務(wù)器系統(tǒng)為CentOS6上部署生產(chǎn)環(huán)境,但是代碼都是基于Python2.7寫的,所有遇到了問題,下面通過本文給大家介紹下在CentOS6上安裝Python2.7的解決方法,一起看看吧
    2018-01-01
  • Python multiprocessing多進程原理與應(yīng)用示例

    Python multiprocessing多進程原理與應(yīng)用示例

    這篇文章主要介紹了Python multiprocessing多進程原理與應(yīng)用,結(jié)合實例形式詳細分析了基于multiprocessing包的多進程概念、原理及相關(guān)使用操作技巧,需要的朋友可以參考下
    2019-02-02
  • Python使用日志模塊快速調(diào)試代碼并記錄異常信息

    Python使用日志模塊快速調(diào)試代碼并記錄異常信息

    本文詳細介紹了Python logging日志模塊的使用方法,包括如何在代碼中使用logging記錄調(diào)試信息、如何設(shè)置日志級別、如何記錄異常信息等。通過本文的指南,讀者可以快速學(xué)會如何使用logging模塊進行調(diào)試,并保留有用的日志信息,便于后續(xù)排查問題和優(yōu)化代碼
    2023-04-04

最新評論