这个 Python 示例中有多少个线程正在运行?

4
我想学习如何使用Python在多线程中运行函数。换句话说,我有一个长列表的参数,我想发送到一个可能需要时间才能完成的函数。我希望我的程序循环遍历这些参数,并并行调用函数(无需等待函数完成第一个参数)。
我从这里找到了以下示例代码:
import Queue
import threading
import urllib2

# called by each thread
def get_url(q, url):
    q.put(urllib2.urlopen(url).read())

theurls = ["http://google.com", "http://yahoo.com"]

q = Queue.Queue()

for u in theurls:
    t = threading.Thread(target=get_url, args = (q,u))
    t.daemon = True
    t.start()

s = q.get()
print s

我的问题是:

1)通常我知道我需要指定我希望程序并行运行的线程数量。但是以上代码中没有特定数量的线程。

2)线程的数量因设备而异(取决于处理器、内存等)。由于此代码未指定任何线程数量,程序如何知道正确的并发运行线程数?


无法理解你的问题,但是有三个线程。一个主线程和两个子线程在for循环中创建。 - Sraw
我怀疑它不是有限制的。不过,基于Sraw所述的原因,我认为这个限制是3。 - sniperd
你想知道有多少线程正在同时运行,还是只想知道在你的代码中定义了多少个线程?由于全局解释器锁定,一次只能运行一个线程(即没有“真正”的并行执行)。线程将以并发方式运行,这意味着它们分割 CPU 时间并逐个工作。 - GPhilo
1个回答

1
线程是在for循环中创建的。由于theurls中有两个元素,因此for循环将执行两次。这也回答了你的另外两个问题。因此,程序中会有两个线程,再加上主循环线程,总共有3个线程。

但是我的程序有数十万到一百万个项目(类似于URL的参数,但我从文件中读取参数),我需要循环遍历它们。我该如何处理? - user9371654
使用ThreadPool(例如参考此问题和答案:https://dev59.com/y3A75IYBdhLWcg3w6Nr8) - GPhilo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接