本文主要是介绍python同步/异步开发中如何进行调试与分析?python的gamla同步异步调试库的使用教程-icode9专业技术文章分享,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
python同步/异步开发是我们进行开发的很重要的一个环节,如何加快在同步/异步开发尤其是异步开发中进行调试与分析呢?今天我们介绍一个gamla库,来帮助您查找代码中的错误和性能问题。快来一起看看吧~
简要了解 gamla 库提供的 4 个函数,它们有助于查找代码中的错误和性能问题。
gamla是 Python 的函数式编程库。
今天我们将研究它提供的 4 个功能,这些功能可帮助您查找代码中的错误和性能问题。
我们将关注debug、debug_exception和。timeitprofileit
前两个建立在本地breakpoint命令之上。
Python 有一个名为 pdb 的内置命令行调试器。可以通过breakpoint()在任何地方键入来调用它。
运行代码时,会在该位置暂停执行,并出现 pdb 命令提示符。
因为这是语言本身的一部分,我们可以用它来构建更高级的调试工具!
my_list = [1, 2, 'c', 4]
sorted_list = sorted(my_list, key=lambda x: x**2)
运行它会引发异常:
类型错误:** 或 pow() 不支持的操作数类型:“str”和“int”
所以通常你会在某处放置一个断点并对其进行调试,但通常你需要分解出 lambda 并将其放入一个函数中,将值赋给一个变量以便检查它。这会像这样:
def key_fn(x):
breakpoint()
return x**2
my_list = [1, 2, 'c', 4]
sorted_list = sorted(my_list, key=key_fn)
但这有点乏味。我们想要的是某种内联断点的方法。这就是debug进来的地方。
它的实现可以被认为是这样的:
def debug(x):
breakpoint()
return x
这允许我们像这样内联断点:
from gamla import debug
my_list = [1, 2, 'c', 4]
sorted_list = sorted(my_list, key=lambda x: debug(x)**2)
这意味着当我们只想看一些东西时不需要重构我们的代码。
如果您在管道中编程,这将特别有用:
from gamla import debug, pipe
pipe(
x,
f1,
f2,
debug, # Will pause, enabling access into the value after `f2`, and before `f3`.
f3,
)
调试后
有时我们已经有一个函数在做这项工作,我们只是想看看它返回什么。在这种情况下,使用 更方便debug_after,因为您可以将它写在函数之外,而不必费心将括号正确地放在值周围。
from gamla import debug_after
@debug_after
def key_fn(x):
return x**2
my_list = [1, 2, 'c', 4]
sorted_list = sorted(my_list, key=key_fn)
自然,还有一个debug_before。
调试异常
这很好,但是如果我们有一个巨大的列表怎么办?我们将不得不循环使用很多值,直到我们找到显示问题的值。
debug_exception救援。它类似于debug_before,但只有在底层函数引发异常时才会中断。然后就可以查看导致此异常的值。
它可以用作装饰器或内联,包装一个函数。
from gamla import debug_exception
@debug_exception # Will break only once!
def key_fn(x):
return x**2
my_list = [1, 2, 'c', 4]
sorted_list = sorted(my_list, key=key_fn)
In [1]: @debug_exception # 只会中断一次!
...: def key_fn(x):
...: 返回 x**2
...:
在 [2] 中:my_list = [1, 2, 'c', 4]
在 [3] 中:sorted_list = sorted(my_list, key=key_fn)
> debug_utils.py(90)debug_exception()
-> raise e
(Pdb) x
('c',)
(Pdb) c
...
请注意,输入值由 引用x,并显示为tuple,因为可能有多个参数。
如果您的函数是异步的,则上述所有函数的工作方式都相同。你不必担心。
计时
这个函数获取一个函数并记录它花费了多少时间。它还添加了一些颜色来指示它有多慢。
它也适用于async:
简介
这个实用程序在后台使用yappi来打印同步或异步函数上最慢的内部调用。
profileittimeit每个都有稍微不同的用途——前者非常详细并且执行速度慢,因此可用于在本地调试难以发现的问题,而后者速度极快并提供良好的输出,这意味着它可以安全使用在生产中。
将调试工具视为代码意味着您可以根据需要为自己构建一组工具,例如debug_compose,它会在管道中的每个步骤后暂停,或者将其与其他有用的概念一起使用,例如when(greater_than(3), debug),它会让您查看值但仅如果他们通过了一些条件。
希望这对您有用,如果您发现有用的模式,请务必向我们发送 PR。
这篇关于python同步/异步开发中如何进行调试与分析?python的gamla同步异步调试库的使用教程-icode9专业技术文章分享的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!