2012-08-22 61 views
3

我想模擬Python中的時間。我想每秒應用「my_fct」,但是我不知道「my_fct」需要多長時間才能運行,所以我不能使用睡眠。 我所做的是:模擬時間python

past_time = datetime.datetime.utcnow() 
    present_time = datetime.datetime.utcnow() 
    for i in range(10): 
     while((present_time - past_time).total_seconds() < 1): 
      present_time = datetime.datetime.utcnow() 
     my_fct(......) 
     past_time = present_time 

我不認爲這是做它的好辦法嗎?什麼是正確的解決方案? 謝謝

回答

6

運行代碼給出:

>>> 

Traceback (most recent call last): 
    File "C:\python\tester.py", line 6, in <module> 
    while((present_time - past_time) < 1): 
TypeError: can't compare datetime.timedelta to int 

你需要的是這樣的:

import datetime 

past_time = datetime.datetime.utcnow() 
present_time = datetime.datetime.utcnow() 
for i in range(10): 
    while((present_time - past_time).seconds < 1): 
     present_time = datetime.datetime.utcnow() 
    my_fct(......) 
    past_time = present_time 

時間時給出了一個timedelta值。你需要這個值的秒數。然後比較你的int。

編輯:但是,我現在意識到這不是你正在尋找的解決方案。

這是一種帶有螺紋做到這一點(一個非常簡單的方法 - 容易根據什麼my_fct()做的問題。)

import time 
from threading import Thread 

for i in range(10): 
    time.sleep(1) 
    t = Thread(target=my_fnc, args=(......)) 
    t.start() 
+0

對不起,我沒有抄得很好,我的代碼是:(present_time - past_time).total_seconds() – lizzie

+0

但是這種解決方案是否正確? – lizzie

+1

@lizzie:不可以。根據你的功能運行的時間長短,你將*失去時間。你需要在一個單獨的線程中運行你的函數。 –