在用于CSP样式进程的异常处理程序中,我需要读取并丢弃通道的全部内容,以允许其他受阻塞的进程向其发送消息。该界面提供了一个用于接收的生成器,是否有比以下方式更快地消耗和丢弃生成器全部内容的方法?
for _ in chan: pass
有一种方法稍微快一点:
collections.deque(chan, maxlen=0)
但是,您的代码使意图更加清晰,因此您应该衡量是否存在明显的差异。我几乎总是喜欢您的代码。
(不过,我永远不会将其_用作变量名。它_会使人感到困惑,在交互式外壳程序中与通用gettext别名发生冲突。)
_
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