首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么python线程在开头的数目是2?

为什么python线程在开头的数目是2?
EN

Stack Overflow用户
提问于 2016-11-07 18:08:29
回答 3查看 2.7K关注 0票数 10
代码语言:javascript
运行
复制
import threading
print threading.activeCount()

产出:2

当此代码保存到文件中并运行时。

当它是主线程时,它怎么可能是2呢?

在运行foo.py文件时,除了主线程之外,python默认情况下还运行另一个线程吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-11-07 18:17:24

通灵调试:您没有在普通Python解释器中运行。普通的Python解释器不会启动额外的线程(除非您有一个奇怪的PYTHONSTARTUP文件),但是其他解释器会这样做。例如:

  • ipython启动一个额外的线程来保存后台的命令历史记录(以避免延迟提示符)
  • IDLE是使用在套接字上通信的多个进程设计的,它提供的交互式解释器正在使用守护进程线程执行后台套接字通信。

尝试运行print threading.enumerate();它可能会告诉您后台线程正在做什么(例如,ipython正在使用一个名为HistorySavingThreadThread子类,IDLEs是普通的Thread,但是它运行的函数名为SockThread,它为您提供了它正在做什么的线索)。

票数 14
EN

Stack Overflow用户

发布于 2018-06-28 07:20:23

默认的运行线程是主线程,因此下一个线程将是主线程的子线程,因此它将启动form count 2

示例:

代码语言:javascript
运行
复制
thread count is :    1
Enumerate thread count is :  [<_MainThread(MainThread, started 140735135682560)>]
Starting Thread-1
thread count is :    2
Enumerate thread count is :  [<_MainThread(MainThread, started 140735135682560)>, <myThread(Thread-1, started 123145306509312)>]
Starting Thread-2
thread count is :    3
Enumerate thread count is :  [<_MainThread(MainThread, started 140735135682560)>, <myThread(Thread-1, started 123145306509312)>, <myThread(Thread-2, started 123145310715904)>]
Exiting Main Thread
thread count is :    3
Enumerate thread count is :  [<_MainThread(MainThread, started 140735135682560)>, <myThread(Thread-1, started 123145306509312)>, <myThread(Thread-2, started 123145310715904)>]
Thread-1: Thu Jun 28 12:44:35 2018
Thread-1: Thu Jun 28 12:44:36 2018
Thread-2: Thu Jun 28 12:44:36 2018
Thread-1: Thu Jun 28 12:44:37 2018
Thread-1: Thu Jun 28 12:44:38 2018
Thread-2: Thu Jun 28 12:44:38 2018
Thread-1: Thu Jun 28 12:44:39 2018
Exiting Thread-1
Thread-2: Thu Jun 28 12:44:40 2018
Thread-2: Thu Jun 28 12:44:42 2018
Thread-2: Thu Jun 28 12:44:44 2018
Exiting Thread-2
Enumerate thread count is :  [<_MainThread(MainThread, started 140735135682560)>]
票数 -1
EN

Stack Overflow用户

发布于 2020-06-03 12:51:47

当我在空闲中运行像您这样的程序时,它返回线程数为2。当我在Windows中运行它时,它返回线程数为1。因此,显然,空闲使用一个额外的线程。

当在空闲中运行threading.enumerate()时,它说有两个线程在运行: MainThread和SockThread --在Windows中运行相同的代码时,SockThread没有运行。

总之,当您在空闲中运行python代码时,SockThread在后台运行,这会将1添加到线程计数中。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40471711

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档