python - 如何对整个流程从开始到完成进行计时并设置终止执行时间?
问题描述
我有以下芹菜链流程:
@app.task(name='bcakground')
def background_task():
now = datetime.now()
ids = [700,701,708,722,783,799]
for id in ids:
my_process = chain(taks1.s(id), task2.s())
my_process()
end = datetime.now()
return ['ENDED IN',(end-now).total_seconds()]
Q1:我怎么知道这个任务从开始到结束需要多长时间?我得到的结果(ENDED IN)
并不反映事实,因为链是并行运行的,结果只有几分之一秒。
Q2有没有办法在 background_task 的整个过程花费超过 25 分钟的情况下设置终止超时?
解决方案
我认为您可以使用 functools 的包装,这里有一个类似问题的答案:timeit-versus-timing-decorator。@jonaprieto 给出了在链接中使用包装的示例,我在下面复制了。这应该可以让你实现你想要的。
from functools import wraps
from time import time
def timing(f):
@wraps(f)
def wrap(*args, **kw):
ts = time()
result = f(*args, **kw)
te = time()
print 'func:%r args:[%r, %r] took: %2.4f sec' % \
(f.__name__, args, kw, te-ts)
return result
return wrap
在一个例子中:
@timing
def f(a):
for _ in range(a):
i = 0
return -1
调用用@timing 包裹的方法 f:
func:'f' args:[(100000000,), {}] took: 14.2240 sec
f(100000000)
推荐阅读
- reactjs - React JS 打印用户的选择
- mysql - 解释性能模式 count_star
- android - 在继续之前等待所有字节(颤振)
- docker-compose - 将文件从项目文件夹复制到主机并在我的容器中使用它们
- spring-boot - 使用带有 Spring MVC 的 Camunda 引擎?
- sql - SQL 查询 - 检查两个不同的值
- elasticsearch - 另存为字符串 instandof float,如何查询所有磨损的文档
- tensorflow - 在 Keras DataGenerator 上使用 Tensorflow 数据集是否有意义?
- curve-fitting - 线拟合python
- ansible - 生成具有逗号分隔值的序列