gevent.util --低级公用设施#

低级公用事业。

class GreenletTree(greenlet)[源代码]#

基类:object

表示绿叶树。

在Gevent中, 起源 绿色小树通常是树的中心,因此这棵树主要是沿着 spawning_greenlet 尺寸。

此对象有一个显示此层次结构的小型str窗体。这个 format 方法可以输出更多详细信息。确切的输出是未指明的,但旨在供人阅读。

使用 forest 方法获取所有线程的根greenlet树,以及 current_tree 获取当前线程的根greenlet树。

classmethod current_tree() GreenletTree[源代码]#

返回 GreenletTree 对于当前线程。

classmethod forest() sequence[源代码]#

返回一个序列 GreenletTree ,每个运行本机线程一个。

format(details=True)[源代码]#

喜欢 format_lines 但返回一个字符串。

format_lines(details=True)[源代码]#

为greenlet树返回一系列行。

参数:

details (bool) -- 如果为真(默认值),则在输出中包含更多信息性详细信息。

greenlet = None#

这棵树代表的绿叶树。

is_current_tree = False#

这个树是当前线程的根吗?

class assert_switches(max_blocking_time=None, hub_only=False)[源代码]#

基类:object

上下文管理器,用于确保代码块切换greenlet。

这与 monitoring thread 但范围仅限于WITH语句的主体。如果主体中的代码不屈服于中心(并且不会引发异常),那么在退出上下文管理器时, AssertionError 将被提升。

这对于单元测试和调试很有用。

参数:
  • max_blocking_time (float) -- 如果给定的话,在引发错误之前,主体可以阻塞多达这几秒。

  • hub_only (bool) -- 如果是真的,那么 max_blocking_time 仅指进入集线器的交换机之间所花费的时间量。如果为假,则表示 any 开关。如果 max_blocking_time 没有给出,没有效果。

例子::

# This will always raise an exception: nothing switched
with assert_switches():
    pass

# This will never raise an exception; nothing switched,
# but it happened very fast
with assert_switches(max_blocking_time=1.0):
    pass

在 1.3 版本加入.

在 1.4 版本发生变更: 如果引发异常,则它现在包含有关阻塞持续时间和此对象参数的信息。

class wrap_errors(errors, func)[源代码]#

基类:object

使函数返回异常而不是引发异常的帮助器。

因为greenlet未处理的每个异常都将被记录,所以需要防止非错误异常离开greenlet。这可以用一个简单的 try/except 结构:

def wrapped_func(*args, **kwargs):
    try:
        return func(*args, **kwargs)
    except (TypeError, ValueError, AttributeError) as ex:
        return ex

此类提供了一个将其写入一行的快捷方式:

wrapped_func = wrap_errors((TypeError, ValueError, AttributeError), func)

它也能保存 __str____repr__ 原来的功能。

调用此函数将从 func ,这样它就可以捕获 错误 (安) BaseException 子类或元组 BaseException 子类),并将其作为值返回。

format_run_info(thread_stacks=True, greenlet_stacks=True, limit=None) [str][源代码]#

请求有关当前进程运行线程的信息。

这是一个调试实用程序。它的产出除了用于人类消费外,没有其他保证。

参数:
  • thread_stacks (bool) -- 如果为真,则包括用于运行线程的堆栈。

  • greenlet_stacks (bool) -- 如果为真,则包括用于运行greenlet的堆栈。(将始终打印生成堆栈。)如果将此设置为“假”,则可以在不减少总体信息的情况下显著减少输出量,如果 thread_stacks 是真的,您可以将greenlet与线程关联(使用 thread_ident 打印值)。

  • limit (int) -- 如果给予,直接传给 traceback.format_stack . 如果没有给定,则默认为cpython下的整个堆栈,pypy下的较小堆栈。

返回:

一个文本行序列,详细说明运行线程和greenlet的堆栈。(一个greenlet将复制一个线程、当前线程和greenlet。如果有多个正在运行的线程,则当前greenlet的堆栈可能在多个greenlet中被错误地复制。)有关 gevent.Greenlet 对象也将被返回。

在 1.3a1 版本加入.

在 1.3a2 版本发生变更: 更名为 dump_stacks 为了反映这样一个事实,这将打印有关greenlet的附加信息,包括它们的繁殖堆栈、父级、本地变量和任何繁殖树本地变量。

在 1.3b1 版本发生变更: 增加了 thread_stacksgreenlet_stacks限制 参数。

print_run_info(thread_stacks=True, greenlet_stacks=True, limit=<default value>, file=None)[源代码]#

呼叫 format_run_info 并将结果打印到 file .

如果 file 没有给出, sys.stderr 将被使用。

在 1.3b1 版本加入.