2015-11-07 22 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