我启动了15个Python线程,但为什么top命令说只有1个在运行?

时间:2012-07-17 15:48:33

标签: python multithreading

我启动了15个Python线程,但是top命令表示只有1个正在运行:

top -p 4176,然后键入H

top - 23:46:56 up 46 days,  5:43,  1 user,  load average: 1.16, 1.07, 1.01
Tasks:  16 total,   **1 running**,  15 sleeping,   0 stopped,   0 zombie
Cpu(s): 29.8%us,  0.8%sy,  0.0%ni, 68.4%id,  0.9%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   8085788k total,  7944132k used,   141656k free,   140756k buffers
Swap:  7811068k total,        0k used,  7811068k free,  6902536k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
29771 scraping  20   0  341m 148m 3460 S 16.6  1.9  27:46.68 python
29760 scraping  20   0  341m 148m 3460 S 16.3  1.9  27:45.82 python
29768 scraping  20   0  341m 148m 3460 S  9.0  1.9  28:15.11 python
29767 scraping  20   0  341m 148m 3460 S  8.7  1.9  27:47.97 python
29770 scraping  20   0  341m 148m 3460 R  8.0  1.9  28:05.83 python
29758 scraping  20   0  341m 148m 3460 S  7.7  1.9  28:02.30 python
29761 scraping  20   0  341m 148m 3460 S  7.0  1.9  27:40.68 python
29759 scraping  20   0  341m 148m 3460 S  6.7  1.9  28:21.71 python
29763 scraping  20   0  341m 148m 3460 S  5.7  1.9  28:11.03 python
29769 scraping  20   0  341m 148m 3460 S  5.7  1.9  27:59.36 python
29757 scraping  20   0  341m 148m 3460 S  4.3  1.9  28:01.46 python
29762 scraping  20   0  341m 148m 3460 S  4.0  1.9  28:03.70 python
29765 scraping  20   0  341m 148m 3460 S  4.0  1.9  27:37.34 python
29766 scraping  20   0  341m 148m 3460 S  1.0  1.9  28:05.28 python
29764 scraping  20   0  341m 148m 3460 S  0.3  1.9  27:44.07 python
 4761 scraping  20   0  341m 148m 3460 S  0.0  1.9   0:00.61 python

我想知道为什么只有1个正在运行的任务而不是15/16?

非常感谢。

2 个答案:

答案 0 :(得分:3)

因为它们是线程,而不是进程。进程归操作系统所有,进程可以有多个线程。 http://www.cafeaulait.org/course/week11/02.html

答案 1 :(得分:3)

在* nix上的CPython线程是使用pthread实现的,并且它们在使用top / htop等时显示为它们是单独的进程,即使它们不是(运行15个python进程和运行15个python之间有很大的区别线程和top输出可能会误导这里)。

由于GIL只有一个运行 - 在CPython中,每个解释器中一次只执行一条指令。