我正在对一个 Pandas 系列进行相对繁重的应用。有什么方法可以返回一些打印反馈,说明每次调用函数时在函数内部进行打印还有多远?
请您参考如下方法:
您可以使用跟踪器包装您的函数。以下两个示例,一个基于完成的迭代次数,一个基于总工作量的百分比。
from pandas import Series
def progress_coroutine(print_on = 10000):
print "Starting progress monitor"
iterations = 0
while True:
yield
iterations += 1
if (iterations % print_on == 0):
print "{} iterations done".format(iterations)
def percentage_coroutine(to_process, print_on_percent = 0.10):
print "Starting progress percentage monitor"
processed = 0
count = 0
print_count = to_process*print_on_percent
while True:
yield
processed += 1
count += 1
if (count >= print_count):
count = 0
pct = (float(processed)/float(to_process))*100
print "{}% finished".format(pct)
def trace_progress(func, progress = None):
def callf(*args, **kwargs):
if (progress is not None):
progress.send(None)
return func(*args, **kwargs)
return callf
def my_func(i):
return i * 2
data_series = Series(xrange(100000))
co1 = progress_coroutine()
co1.next()
co2 = percentage_coroutine(len(data_series))
co2.next()
data_series.apply(trace_progress(my_func, progress = co1))
data_series.apply(trace_progress(my_func, progress = co2))
Starting progress monitor
Starting progress percentage monitor
10000 iterations done
20000 iterations done
30000 iterations done
40000 iterations done
50000 iterations done
60000 iterations done
70000 iterations done
80000 iterations done
90000 iterations done
100000 iterations done
10.0% finished
20.0% finished
30.0% finished
40.0% finished
50.0% finished
60.0% finished
70.0% finished
80.0% finished
90.0% finished
100.0% finished
