在我的Python環(huán)境(Win7+Python2.7.9)下測試沒問題,是等待5秒后再輸出 m。
創(chuàng)新互聯(lián)公司成立以來不斷整合自身及行業(yè)資源、不斷突破觀念以使企業(yè)策略得到完善和成熟,建立了一套“以技術(shù)為基點,以客戶需求中心、市場為導(dǎo)向”的快速反應(yīng)體系。對公司的主營項目,如中高端企業(yè)網(wǎng)站企劃 / 設(shè)計、行業(yè) / 企業(yè)門戶設(shè)計推廣、行業(yè)門戶平臺運營、App定制開發(fā)、成都做手機網(wǎng)站、微信網(wǎng)站制作、軟件開發(fā)、四川電信科技城機房等實行標(biāo)準(zhǔn)化操作,讓客戶可以直觀的預(yù)知到從創(chuàng)新互聯(lián)公司可以獲得的服務(wù)效果。
你的問題可能是被標(biāo)準(zhǔn)輸出流的緩沖區(qū)緩沖了,給 stdout 加一個 flush 就可以了:
from?time?import?sleep
from?sys?import?stdout
print?"s"
stdout.flush()
sleep(5)
print?"m"
您的意思是要將進程掛起(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秒
ReaderWriter
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
Python中的sleep函數(shù)可以傳小數(shù)進去,然后就可以進行毫秒級的延時了。
代碼如下:
import time
i = 1
while i = 3:
print(i) # 輸出i
i += 1
time.sleep(1) # 休眠1秒
例1:循環(huán)輸出休眠100毫秒
import time
i = 1
while i = 3:
print(i) # 輸出i
i += 1
time.sleep(0.1) # 休眠0.1秒
擴展資料
python中 time.sleep()用法:
sleep() 方法暫停給定秒數(shù)后執(zhí)行程序。該參數(shù)可以是一個浮點數(shù)來表示一個更精確的睡眠時間。
實際中止時間可能不到所請求的,因為任何捕獲信號將終止 sleep()接下來執(zhí)行該信號捕捉的程序。
以下是sleep()方法的語法:
time.sleep(t)
參數(shù) t – 這是要暫停執(zhí)行的秒數(shù)。 返回值:此方法不返回任何值。
你可以使用m = raw_input()來實現(xiàn)暫停的效果。
如果解決了您的問題請采納!
如果未解決請繼續(xù)追問!
time.sleep在python3.11中替換為python。
INTRO:眾所周知,time.sleep的準(zhǔn)確率取決于操作系統(tǒng)和計算負(fù)載。 Windows 中的準(zhǔn)確性非常差。
類似于 /questions/17499837一個方法可以使用 time.clock 實現(xiàn)忙等待方法作為 time.sleep 的替代方法.這種方法會造成不必要的負(fù)載,影響系統(tǒng)中的其他模 block 。這在進行模擬時是不可取的。
減少花在忙等待上的時間,而不是依賴 time.sleep , 一個類使用方法 select.select并利用超時屬性。