使用Python库import threading
我遇到了threading.active_count()
函数,它返回活动线程的数量。但threading.activeCount()
函数返回完全相同的东西。
即使他们的帮助字符串完全相同。
所以我的问题是,有什么区别?
如果他们 完全相同,那么这与PEP 20,Python的禅宗相反,它说:
There should be one-- and preferably only one --obvious way to do it.
这可能是向后兼容问题吗?
答案 0 :(得分:3)
Python基本上克隆了用于线程接口的Java API,因此它保留了两个版本的名称:使用Python首选下划线的名称,以及用于向后兼容的camelCase中的名称。线程模块中的comments说:
关于PEP 8兼容名称的注释。这个线程模型最初受Java启发,并继承了该语言中camelCase函数和方法名称的约定。这些原始名称不存在被弃用的任何迫在眉睫的危险(即使对于Py3k),因此该模块将它们作为符合PEP 8的名称的别名。请注意,使用新的PEP 8兼容名称有助于使用多处理模块进行替换,该模块不提供旧的Java灵感名称。
你可以看到彼此只有aliases:
def active_count():
"""Return the number of Thread objects currently alive.
The returned count is equal to the length of the list returned by
enumerate().
"""
with _active_limbo_lock:
return len(_active) + len(_limbo)
activeCount = active_count
在一个commit,CPython实现实际上删除了旧功能,但是,他们reintroduced和暂时deprecated它们以避免向后兼容性问题。您不应该将camelCase函数用于新代码。虽然它们现在没有被明显弃用,但是camelCase函数不是explicitly documented,你应该更喜欢PEP8版本。