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 循环的下一次迭代,并创造下一个线程。