python 扭曲: retrieve a deferred's execution time

标签 python twisted deferred

我想知道 Deferred 从触发第一个回调到最终结果需要多长时间才能执行。

关于如何做到这一点的任何想法,可能以非侵入性方式(意味着不修改任何回调函数以跟踪执行时间)?

最佳答案

如果您在“twistd”的帮助下运行您的程序,那么它有一个选项“--profile”可以帮助您分析扭曲的代码。

twistd "other options" --profile=statsfile --profiler=cProfile --savestats

查看统计信息:

import pstats
stats = pstats.Stats('statsfile')
stats.sort_stats('time').print_stats()

回调在 deferreds 被触发后立即执行。但立即意味着延迟链中的每个回调都必须执行,并且它们将有自己的执行时间。此外,各种代码片段将有自己的执行时间片,包括 react 器循环。

所以说立即这个词就是说尽快。

考虑下面的坏例子:

from twisted.internet import reactor, defer
import time

def timeit(func):
    def wrapper(*arg):
        t1 = time.time()
        res = func(*arg)
        t2 = time.time()
        print '%s took %0.3f ms' % (func.func_name, (t2-t1)*1000.0)
        return res
    return wrapper

d = defer.Deferred()

@timeit
def callfunc1(result):
    print 'XXXXX'

@timeit   
def callfunc2(result):
    print 'YYYYY'

d.addCallback(callfunc1)   
d.addCallback(callfunc2)  
t1 = time.time()
d.callback(True)
t2 = time.time()
print '%0.3f ms' % ((t2-t1)*1000.0)

输出:

XXXXX
callfunc1 took 0.039 ms
YYYYY
callfunc2 took 0.005 ms
0.108 ms

现在,如果我们调整上面的代码以包含 react 器和 callLater

关于 python 扭曲: retrieve a deferred's execution time,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4035912/

相关文章:

javascript - 在 Angular 应用程序中使用 for 循环链接 promise 并延迟

jQuery .when().done() 不工作

python - python2 和 python3 之间的区别 - int() 和 input()

python - 在 pandas 的 groupby 命令后与 seaborn 一起绘制

python - 在 Twisted 上使用 WSGI

python - 哪个键值存储有不错的扭曲 API(非阻塞)?

python - Selenium python递归文本抓取

python - Django 模板外键检查

networking - Twisted 中 select/poll 与 epoll react 器的注意事项

javascript - jQuery Deferred 链失败继续