21-第2步_创建并启动线程
第2步:创建并启动线程
既然已经定义了 downloadXkcd()
,我们将创建多个线程,每个线程调用 downloadXkcd()
,以从 XKCD 网站下载不同类型的漫画。将下面的代码添加到multidownloadXkcd.py中,放在 downloadXkcd()
函数定义之后:
#! python3
# threadedDownloadXkcd.py - Downloads XKCD comics using multiple threads.
--snip--
# Create and start the Thread objects.
downloadThreads = [] # a list of all the Thread objects
for i in range(0, 140, 10): # loops 14 times, creates 14 threads
start = i
end = i + 9
if start == 0:
start = 1 # There is no comic 0, so set it to 1.
downloadThread = threading.Thread(target=downloadXkcd, args=(start, end))
downloadThreads.append(downloadThread)
downloadThread.start()
首先,我们创建了一个空列表 downloadThreads
,该列表帮助我们追踪创建的多个 Thread
对象。然后开始 for
循环。在每次循环中,我们利用 threading. Thread()
创建一个 Thread
对象,将它追加到列表中,并调用 start()
,以开始在新线程中运行 downloadXkcd()
。因为 for
循环将变量 i
设置为从 0
到 140
,步长为 10
,所以 i
在第一次迭代时为 0
,第二次迭代时为 10
,第三次迭代时为 20
,以此类推。因为我们将 args=(start,end)
传递给 threading.Thread()
,所以在第一次迭代时,传递给 downloadXkcd()
的两个参数将是 1
和 9
,第二次迭代是 10
和 19
,第三次迭代是 20
和 29
,以此类推。
随着调用 Thread
对象的 start()
方法,新的线程开始运行 downloadXkcd()
中的代码,主线程将继续 for
循环的下一次迭代,并创造下一个线程。