如何在Python中查找线程的运行时间

Ven*_*nom 5 python timer python-multithreading python-2.7

我有一个多线程SMTP服务器.每个线程负责一个客户端.我需要在每个服务器线程上设置10秒的超时值,以终止休眠或行为不端的客户端.
我用过time.time(),找到了开始时间和检查点时间,差异给出了运行时间.但我相信它给了系统时间而不是这个线程运行的时间.
Python中是否有Thread本地计时器API?

   import threading
   stop = 0

   def hello():
     stop = 1

   t=threading.Timer(10,hello)
   t.start()
   while stop != 1:
      print stop
   print "stop changed"
Run Code Online (Sandbox Code Playgroud)

这会在循环中打印0(初始停止)并且不会出现在while循环中.

Bak*_*riu 8

在python文档中没有提到"线程计时".时钟在整个过程中或系统范围内.特别是time.clocktime.time返回系统时间的同时测量处理时间.

在python3.3中,时序API被修改和改进但仍然,我看不到任何会返回单个线程所花费的处理时间的计时器.

另请注意,即使可能,编写此类计时器也不容易.定时器是特定于操作系统的,因此您必须为每个操作系统编写不同版本的模块.如果要分析特定操作,只需在没有线程的情况下启动它.当线程化时,它按预期运行,或者因操作系统而慢很多,在这种情况下你不能对它做任何事情(至少,如果你不想写一个"修复"的补丁) GIL或安全删除它).


hem*_*lit 5

自问这个问题以来,Python在6年中取得了进步,在3.3版中,它引入了一种工具来精确满足此处的要求:

time.clock_gettime(time.CLOCK_THREAD_CPUTIME_ID)

Python 3.7还引入了类似的功能time.clock_gettime_ns

详细的文档正是您所期望的,但是该功能非常简单易用。


小智 5

Python 3.7 添加了time.thread_time()似乎可以完成此问题所需的方法。根据docs,它是特定于线程的,不包括睡眠时间。