2015-11-07 21 views
1

程序應該在時間變量指定的時間限制內響應並打印val。定時器不能在python代碼中工作

import timeit 
from threading import Thread 

val = 0 
time = 3.05274241722e-05 

def function1(): 
    global val 
    for i in range(0,10000): 
     val = val+i 
    return val 

def function2(): 
    global val 
    for i in range(0,10000): 
     val = val+i 
    return val 

if __name__ == '__main__': 
    start_time = timeit.default_timer() 
    Thread(target = function1).start() 
    Thread(target = function2).start() 
    while time-1 <=(timeit.default_timer() - start_time): 
     if time-1 >(timeit.default_timer() - start_time): 
      break 
     print time-1 
     print timeit.default_timer() - start_time 
     print val 
     pass 

    print val 
    Thread(target = function1).exit() 
    Thread(target = function2).exit() 

而且請讓我知道我是否正確使用線程。謝謝

回答

0

你的time-1是一個負值,這將總是小於(timeit.default_timer() - start_time),所以這是一個無限循環,並且if聲明更加多餘。此外,你使用線程的方式是錯誤的。

試試下面的代碼

import timeit 
from threading import Thread 
val = 0 
time = 2.38282775879e-05 
flag = False 

def function1(): 
    global val 
    global flag 
    for i in range(0,1000): 
     if not flag: 
      val = val+i 
      print val 
     else: 
      break 

def function2(): 
    global val 
    global flag 
    for i in range(0,1000): 
     if not flag: 
      val = val+i 
      print val 
     else: 
      break 

if __name__ == '__main__': 
    f1 = Thread(target = function1) 
    f2 = Thread(target = function2) 
    start_time = timeit.default_timer() 
    f1.start() 
    f2.start() 
    f1.join(time) 
    f2.join(time) 
    flag = True 
    end_time = timeit.default_timer() 
    f1.join() 
    f2.join() 
    if time <= end_time - start_time: 
     print "Timeout" 
    else: 
     print "Finished before timeout" 
    print end_time - start_time 
    print val 
+0

謝謝。但我的目標是並行運行2個線程,這將使用兩種不同的方法生成val。程序應該在動態設置的時間變量下指定的時間內返回一個val。 – Shashikiran

+0

也可以請你解釋f1.join(時間)嗎?因爲我沒有這樣做加入..謝謝 – Shashikiran

+0

更新的代碼,它應該是你現在想要的 – lingxiao