【发布时间】:2016-11-01 06:34:54
【问题描述】:
Python (2.7.9) 中的itertools.count 计数器对于线程安全计数非常方便。我怎样才能得到计数器的当前值呢?
每次调用next()时,计数器都会递增并返回最后一个值:
import itertools
x = itertools.count()
print x.next() # 0
print x.next() # 1
print x.next() # 2
到目前为止,一切都很好。
如果不调用next(),我找不到获取计数器当前值的方法,这会产生增加计数器的不良副作用,或者使用repr() 函数。
从上面开始:
print repr(x) # "count(3)"
所以你可以解析repr() 的输出。类似的东西
current_value = int(repr(x)[6:-1])
可以解决问题,但真的很丑。
有没有办法更直接地获取计数器的当前值?
【问题讨论】:
-
它在哪里说它是线程安全的?
-
@MattiVirkkunen 我读过this answer,在自己测试之后,看来
next(count())确实是线程安全的。 -
测试线程安全并不容易。此外,如果您依靠 GIL 来保证其线程安全,那么与仅使用普通变量和
+=真的有什么区别吗? -
@Carl 它是在一个名为
count_repr()的 C 函数中实现的。 -
@MattiVirkkunen
+=绝对不是线程安全的。 stackoverflow.com/questions/1717393/…