小编典典

排空或丢弃发电机而不循环?

python

在用于CSP样式进程的异常处理程序中,我需要读取并丢弃通道的全部内容,以允许其他受阻塞的进程向其发送消息。该界面提供了一个用于接收的生成器,是否有比以下方式更快地消耗和丢弃生成器全部内容的方法?

for _ in chan:
    pass

阅读 104

收藏
2021-01-20

共1个答案

小编典典

有一种方法稍微快一点:

collections.deque(chan, maxlen=0)

但是,您的代码使意图更加清晰,因此您应该衡量是否存在明显的差异。我几乎总是喜欢您的代码。

(不过,我永远不会将其_用作变量名。它_会使人感到困惑,在交互式外壳程序中与通用gettext别名发生冲突。)

编辑 :这是一些简单的时间:

In [1]: import collections

In [2]: a = range(100000)

In [3]: timeit reduce(lambda _, __: None, a)
100 loops, best of 3: 13.5 ms per loop

In [4]: timeit for dummy in a: pass
1000 loops, best of 3: 1.75 ms per loop

In [5]: timeit collections.deque(a, maxlen=0)
1000 loops, best of 3: 1.51 ms per loop
2021-01-20