2016-02-28 66 views
1

我正在處理一個需要每45秒打印一次的問題。所以我用time.sleep(45)和由如下面的代碼:Python中的計時器

import timer 

def print_data(): 
    print "Hello World!" 
    time.sleep(45) 

while True: 
    print_data() 

我有一對夫婦,我正在努力瞭解和學習的查詢。我已經重新搜索過,但無法得到我正在尋找的答案。請在下面找到我的疑問:

  1. 如何打印上面的內容究竟持續了1小時的等待每45秒?

  2. 我們可以給出一個隨機值,說30-45秒的等待時間。所以它可以等待30-45秒之間的任何值?

  3. 當我每隔60秒刷新/等待4到5個小時的定時器時,RAM或CPU如何工作?這會以任何方式影響CPU或RAM嗎?

請幫助我理解這些問題。任何幫助,將不勝感激。提前致謝。

回答

4

這應該做你在找什麼:

import time 
from random import randint 

def print_data(): 
    print "Hello World!" 
    time.sleep(randint(30, 45)) 

def print_data_for(total_time): 
    start_time = time.time() 
    while time.time() < start_time + total_time: 
     print_data() 

print_data_for(60*60) # 1 hour 

至於CPU/RAM使用情況,我的經驗(我有一個基於sleep一個腳本,打印常規狀態信息監控另一個進程)是,進程在空閒時並不是非常昂貴,這在這裏得到證實:Python - is time.sleep(n) cpu intensive?

+0

謝謝你,我會通過你提供的鏈接! – Dev

1

您可以打印每秒的隨機值,並等待鍵盤中斷,因爲time.sleep()什麼也不做。

import time 
    from random import randint 

    def print_data(time, data): 
     start_time = time.time() 
     if time.time() < start_time + time: 
       pass 
     except KeyBoardInterrupt: 
       data = raw_input("what's your value?") 
       print data 
     else: 
       print data 

    data = "Hello World!" 

    while True: 
      print_data(data) 
      if time.time() - start_time > (60*5): 
      break 
      print "Done!" 

也知道你的CPU和內存使用情況,您可以使用psutil庫https://pypi.python.org/pypi/psutil,psutil是用於檢索通過運行在便攜方式的流程和系統利用率(CPU,內存)的信息提供接口的功能模塊使用Python,實現許多由ps,top和Windows任務管理器等工具提供的功能。

它通過使用獨特的代碼庫,目前支持Linux,OS X,FreeBSD和Windows,Python版本從2.4到3.1。