<p>好吧,我最后用线解决了一些问题。谢谢你的建议!在</p>
<pre><code>import codecs, threading, time
from functools import wraps
def log_time(logpath="log.txt", interval=5):
def log_time_decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
t = threading.Thread(target=func, args=args, kwargs=kwargs)
log_entries = 0
with codecs.open(logpath, "wb", "utf-8") as logfile:
start_time = time.time()
t.start()
while t.is_alive():
elapsed_time = (time.time() - start_time)
if elapsed_time > interval * log_entries:
m, s = divmod(elapsed_time, 60)
h, m = divmod(m, 60)
logfile.write("Elapsed time: %2dh %2dm %2ds\n" %(h, m, s))
log_entries += 1
return wrapper
return log_time_decorator
</code></pre>
<p>一个缺点可能是您无法轻松地检索函数的返回值(至少我还没有找到它)。在</p>
<p><strong>EDIT1:删除了一个不必要的变量,并为日志写入添加了一个很好的格式(参见<a href="https://stackoverflow.com/questions/1384406/python-convert-seconds-to-hhmmss">this</a>)</strong></p>
<p><strong>EDIT2:即使其他用户拒绝了他的编辑,我还是希望包含一个来自<a href="https://stackoverflow.com/users/1354439/piotr-dabkowski">Piotr Dabkowski</a>的版本,因为它使用返回值:</strong></p>
^{pr2}$