线程以及多线程

线程

每个python程序,在运行的时候,系统都为默认为这个进程创建一个线程来执行程序(这个线程叫'主线程')
如果想要让程序不在主线程中执行,就需要手动的去创建其他的线程('子线程') ---> threading模块(python内置的模块)

time模块是python内置的时间相关的模块,里面提供了很多时间相关的类和方法

import time
import threading

def download (file):
print('开始下载%s...'% file)
time.sleep(5)
print('%s下载完成,耗时5秒‘’% file)
if _ name _ _ ==' _ main_ _':

=====在主线程中下载两个内容=======
获取当前时间
start = time.time()
download(' 电影1')
download(' 电影2')
end = time.time()
print(' 总共耗时:%d秒 '%(end - start))
先下载电影1 然后下载电影2 总共耗时10秒

1.创建线程对象
t1 = threading.Thread(target = download, args= ('电影1,'))
target:创建的子线程中的执行函数(函数变量)
args:需要在子线程中执行的函数的参数(元祖)-->注意,实参后必须加逗号

2.执行需要在子线程中执行的代码
t1.start()
t2 = threading.Thread(target = download , args = ('电影2',))
t2.start()
t1下载完成 耗时5秒
t2下载完成 耗时5秒

线程类

1.声明一个类,继承自Thread类

 class DownloadTHread (Thread):
     #5.重写init方法来接收,run中需要的外部的内容
    def __init__(self, file):
    # 必须调用父类的init方法
    super().__init__()
    self.file = file
    #重写run方法(run方法中的代码就是在子线程中执行的代码)
   def run(self):
      print('这句话是在子线程中打印的')
      print('开始下载%s' % self.file)
      time.sleep(5)
      print('%s下载完成' % self.file)
    if __name__ == '__main__':
            # 3.通过Thread的子类去创建对象
t1 = DownloadThread('aa.mp4')
  # 4.调用start方法,执行子线程中的任务(不能直接调用run方法)
# t1.run()  # 直接调用run(),run中的代码是在当前线程中执行的
t1.start()  # 通过start间接调用run,run中的代码是在新的线程中执行
print('=======')

# 创建了一个线程,去下载火影忍者100.mp4
t2 = DownloadThread('火影忍者100.mp4')
t2.start()

你可能感兴趣的:(线程以及多线程)