运行定时器在python几分钟(Running a timer for few minutes in

2019-10-17 07:13发布

我试图运行某些功能“foo”的每一秒。 我有几分钟做到这一点(比如5)。

函数foo(),使100个HTTP请求(其中包含一个JSON对象)发送到服务器,并打印JSON响应。

总之,我必须让每秒100个HTTP请求5分钟。

我刚开始学习Python的,因此不具备广博的知识。 这是我曾尝试:

import threading
noOfSecondsPassed = 0
def foo():
   global noOfSecondsPassed
   # piece of code which makes 100 HTTP requests (I use while loop)
   noOfSecondsPassed += 1

while True:
   if noOfSecondsPassed < (300)  # 5 minutes
       t = threading.Timer(1.0, foo)
       t.start()

由于多线程,则函数foo不叫300倍,但很多远不止于此。 我曾尝试设置一个锁太:

def foo():
  l = threading.Lock()
  l.acquire()
  global noOfSecondsPassed
  # piece of code which makes 100 HTTP requests (I use while loop)
  noOfSecondsPassed += 1
  l.release()

代码的其余部分是一样的前面的代码片段。 但是,这也不能正常工作。

我该怎么做呢?

编辑:不同的方法

我曾经尝试这样做的办法,为我工作:

def foo():
    noOfSecondsPassed = 0
    while noOfSecondsPassed < 300:
       #Code to make 100 HTTP requests
       noOfSecondsPassed +=1
       time.sleep(1.0)
foo()

这样做的任何缺点?

Answer 1:

我会用另一种方法是比较容易,我认为。

创建300计时器线程,以前后各运行1秒。 所以误差因素是非常低的主循环几乎在瞬间执行。 下面是一个示例演示:

import datetime
import thread
import threading

def foo():
     print datetime.datetime.now()
     print threading.active_count()

for x in range(0,300): 
     t = threading.Timer(x + 1, foo)
     t.start()

这段代码的输出应该是这样的:

2012-10-01 13:21:07.328029
301
2012-10-01 13:21:08.328281
300
2012-10-01 13:21:09.328449
299
2012-10-01 13:21:10.328615
298
2012-10-01 13:21:11.328768
297
2012-10-01 13:21:12.329006
296
2012-10-01 13:21:13.329289
295
2012-10-01 13:21:14.329369
294
2012-10-01 13:21:15.329580
293
2012-10-01 13:21:16.329793
292
2012-10-01 13:21:17.329958
291
2012-10-01 13:21:18.330138
290
2012-10-01 13:21:19.330300                                                                                                                                                                                                                         
289                         
...

正如你所看到的,每个线程先前推出后约1秒,你开始正好300线程。



文章来源: Running a timer for few minutes in python