当前位置:嗨网首页>书籍在线阅读

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 设置为从 0140 ,步长为 10 ,所以 i 在第一次迭代时为 0 ,第二次迭代时为 10 ,第三次迭代时为 20 ,以此类推。因为我们将 args=(start,end) 传递给 threading.Thread() ,所以在第一次迭代时,传递给 downloadXkcd() 的两个参数将是 19 ,第二次迭代是 1019 ,第三次迭代是 2029 ,以此类推。

随着调用 Thread 对象的 start() 方法,新的线程开始运行 downloadXkcd() 中的代码,主线程将继续 for 循环的下一次迭代,并创造下一个线程。