蟒:显示经过时间上壳(python: display elapsed time on shell)

2019-10-17 00:15发布

当我运行我的Python脚本,有一些功能,占用了一个几分钟就可以完成,所以我想显示在外壳某种定时器,通知上所经过的时间的用户。

是否有这样的事情已经准备在Python中使用?

Answer 1:

一个简单的办法是包括一个时钟在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,并表明在提示。



Answer 2:

如果你是一个Linux或BSD系统上,尝试pv命令( http://www.ivarch.com/programs/pv.shtml )。

$ python -c 'import time;time.sleep(5)' | pv
   0B 0:00:05 [   0B/s ] [<=>                   ]

它会给你一个计时器,这取决于你如何编写你的应用程序的输出,其他的一些统计数据,以及。



Answer 3:

做到这一点最简单的方法是计算在需要几分钟即可完成,简单地打印时间给外壳的功能所经过的时间。 但是取决于你的函数这可能不是最好的解决办法。

第二个办法做到这一点会使用多线程。 因此,有需要在一个线程运行一段时间,而你的程序,然后在循环坐在那里,每隔一段时间打印出所经过的时间,并查找要结束线程的功能。

就像是:

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显示进度条发烧友!



Answer 4:

你说的是测量它需要一个函数来完成,然后打印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))


Answer 5:

您可以使用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


文章来源: python: display elapsed time on shell