您的意思是要將進程掛起(Suspend) 而非 阻塞(Block)
大通網站制作公司哪家好,找成都創新互聯!從網頁設計、網站建設、微信開發、APP開發、自適應網站建設等網站項目制作,到程序開發,運營維護。成都創新互聯2013年開創至今到現在10年的時間,我們擁有了豐富的建站經驗和運維經驗,來保證我們的工作的順利進行。專注于網站建設就選成都創新互聯。
如果用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秒
ReaderWriter
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 中,“return”函數的用法如下:
1、return 語句用于退出函數,終止函數并將 return 值傳回。實例:
def?a(x,y):
if?x==y:
return?x,y
2、用于同一循環語句下,遇到第一個 return 后即返回。實例:
```python
def?fun(a,b):
print?(a)
return?a
print?(b)
return?b
resunlt?=?fun(2,6)
2
```
3、用于 return 在不帶參數的情況下(或者沒有寫 return 語句),默認返回 None。實例:
def?recurve(a,b):
if?a%b==0:
return?b
else:
gcd(b,a%b)
以上內容參考:百度百科-Python
在代碼開頭引入time模塊:import time
在需要延時的地方加入語句:time.sleep(1)
(括號中的1意為停頓1秒,想停頓時間更長可以換數字)
舉例:
import time
print '11'
time.sleep(10)
print '22'
先打印11,等待10秒后,打印22。
擴展資料:
文件執行
1、用 notepad++ 或 Sublime Text,甚至 寫字本創建一個文件。
2、比如:print('Hello world!')
3、保存為 helloworld.py,一定要選或寫后綴名 .py 。
4、進入cmd命令行,切換(cd)到保存文件的目錄,執行 python helloworld.py,文件名前的python表示調用python解釋器執行文件。
描述?Python?time?sleep()?函數推遲調用線程的運行,可通過參數secs指秒數,表示進程掛起的時間。
Python有一個名為time的模塊,該模塊提供了一些有用的功能來處理與時間有關的任務。其中一種常用的函數是sleep()。?sleep()函數將當前線程的執行暫停給定的秒數。?
新聞標題:python暫停函數,python讓程序暫停
網址分享:http://m.newbst.com/article24/dsighje.html
成都網站建設公司_創新互聯,為您提供電子商務、網站維護、網頁設計公司、App開發、標簽優化、移動網站建設
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯