当我运行我的Python脚本,有一些功能,占用了一个几分钟就可以完成,所以我想显示在外壳某种定时器,通知上所经过的时间的用户。
是否有这样的事情已经准备在Python中使用?
当我运行我的Python脚本,有一些功能,占用了一个几分钟就可以完成,所以我想显示在外壳某种定时器,通知上所经过的时间的用户。
是否有这样的事情已经准备在Python中使用?
一个简单的办法是包括一个时钟在sys.ps1
提示符(通常定义的东西>>>
提示)
从文档sys.ps1
:
如果非字符串对象被分配给任一变量,它的
str()
是每个解释器准备读出的新的交互式命令时间重新评估; 这可以被用来实现一个动态提示。
在~/.local/usercustomize.py
(或者更准确地说,在任何文件夹中python -c 'import site; print site.USER_BASE'
显示器),您可以添加:
import sys
import datetime
class ClockPS1(object):
def __repr__(self):
now = datetime.datetime.now()
return str(now.strftime("%H:%M:%S >>> "))
sys.ps1 = ClockPS1()
然后你提示会是这样的:
16:26:24 >>> import time
16:26:27 >>> time.sleep(10)
16:26:40 >>>
它并不完美,作为最后的时间将是在提示出现,而不是在被执行的行,但它可能会有所帮助。 你可以很容易地使这台显示器的时间之间秒__repr__
invokations,并表明在提示。
如果你是一个Linux或BSD系统上,尝试pv
命令( http://www.ivarch.com/programs/pv.shtml )。
$ python -c 'import time;time.sleep(5)' | pv
0B 0:00:05 [ 0B/s ] [<=> ]
它会给你一个计时器,这取决于你如何编写你的应用程序的输出,其他的一些统计数据,以及。
做到这一点最简单的方法是计算在需要几分钟即可完成,简单地打印时间给外壳的功能所经过的时间。 但是取决于你的函数这可能不是最好的解决办法。
第二个办法做到这一点会使用多线程。 因此,有需要在一个线程运行一段时间,而你的程序,然后在循环坐在那里,每隔一段时间打印出所经过的时间,并查找要结束线程的功能。
就像是:
import threading
import time
arg1=0
arg2=1
etc=2
# your function that takes a while.
# Note: If your function returns something or if you want to pass variables in/out,
# you have to use Queues
def yourFunction(arg1,arg2,etc):
time.sleep(10) #your code would replace this
# Setup the thread
processthread=threading.Thread(target=yourFunction,args=(arg1,arg1,etc)) #set the target function and any arguments to pass
processthread.daemon=True
processthread.start() # start the thread
#loop to check thread and display elapsed time
while processthread.isAlive():
print time.clock()
time.sleep(1) # you probably want to only print every so often (i.e. every second)
print 'Done'
然后你可以通过覆盖时间壳,甚至更好,使用GUI显示进度条发烧友!
你说的是测量它需要一个函数来完成,然后打印HH时间:MM:SS.MS?
你可以做:
import datetime, time
time_begin = datetime.datetime.fromtimestamp(time.time())
# call your function here
time_end = datetime.datetime.fromtimestamp(time.time())
print("Time elapsed: ", str(time_end - time_begin))
您可以使用datetime
例如,
import datetime
import time
class Profiler(object):
def __init__(self):
self.start = 0
self.duration = 0
def start(self):
self.start = datetime.datetime.now()
def end(self):
self.duration = datetime.datetime.now() - self.start
class SomeClass(Profiler):
def __init__(self):
Profiler.__init__(self)
def do_someting(self):
self.start()
time.sleep(10)
self.end()
if __name__ == "__main__":
foo = SomeClass()
foo.do_something()
print 'Time :: ', foo.duration