Python中的threading.active_count()和threading.activeCount()有什么区别?

时间:2017-07-08 01:43:19

标签: python multithreading

使用Python库import threading我遇到了threading.active_count()函数,它返回活动线程的数量。但threading.activeCount()函数返回完全相同的东西。

即使他们的帮助字符串完全相同。

所以我的问题是,有什么区别?

如果他们 完全相同,那么这与PEP 20,Python的禅宗相反,它说:

There should be one-- and preferably only one --obvious way to do it.

这可能是向后兼容问题吗?

1 个答案:

答案 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版本。