美文网首页
Day19 线程

Day19 线程

作者: ChiAo1fei | 来源:发表于2019-01-17 17:36 被阅读0次

    线程

    1. 默认情况下,一个进程有且只有一个线程,这个线程叫做主线程

    threading 模块中的Thread类就是线程类,这个类的对象就是线程对象,一个线程对象对应一个子线程
    (需要一个子线程就创建一个Thread类的对象)

    # 2.在3个子线程中同时下载三个电影
    """
    Tread(target, args)     ----     创建子线程对象(关键字参数)
    说明:
    target  -  Function,需要传一个函数(这个函数中的内容会在子线程中执行)
    args  -  target对应的函数参数
    当通过创建好的子线程对象调用start方法的时候,会自动在子线程中条用target对应的函数
        并且将args中的值作为实参
    
    """
    t1 = threading.Thread(target=download, args=('郭锐1.avi',))
    t2 = threading.Thread(target=download, args=('郭锐3.avi',))
    t3 = threading.Thread(target=download, args=('郭锐2.avi',))
    
    # 开始执行对应的任务
    t1.start()
    t2.start()
    t3.start()
    
    print('===============================')
    
    运行结果:
    程序开始
    2019-01-17 17:33:42.673232:郭锐1.avi 开始下载
    2019-01-17 17:33:42.673232:郭锐3.avi 开始下载
    2019-01-17 17:33:42.673232:郭锐2.avi 开始下载
    ===============================
    2019-01-17 17:33:52.673895:郭锐1.avi 下载完成
    2019-01-17 17:33:52.674892:郭锐3.avi 下载完成
    2019-01-17 17:33:52.674892:郭锐2.avi 下载完成
    
    1. 可以通过写一个类,继承Thread的类,来创建属于自己的线程类
      1.声明类继承Tread
      2.重写类的run方法,这个方法中的任务就是需要在子线程中执行的任务
      3.需要线程对象的时候,创建当前声明的类的对象,还是通过start方法在子线程中去执行run方法中的任务

      class DownloadThread(threading.Thread):
          """下载类"""
      
          def __init__(self, file):
              super().__init__()
              self.file = file
      
          def run(self):
              # print(datetime.now())
              print('开始下载:' + self.file)
              # print('run:', threading.current_thread())
              t = randint(5, 10)
              time.sleep(t)
              print(self.file + ' 下载结束', end=' ')
              print('耗时%d秒' % t)
              # print(datetime.now())
      
      
      def creat_thread():
          t1 = DownloadThread('电锯惊魂')
          t1.start()
          t2 = DownloadThread('熊出没')
          t2.start()
          t3 = DownloadThread('喜洋洋与灰太狼')
          t3.start()
      
          t1.join()
          t2.join()
          t3.join()
          print('==========下载结束============')
          global flag
          flag = False
      
      
      def main():
          # 获取当前线程
          # print(threading.current_thread())
          # 调用start方法会自动在子线程中调用run方法
          # 注意:如果直接用对象调用run方法,会在主线程执行
      
          t0 = threading.Thread(target=creat_thread)
          t0.start()
      
          for i in range(100):
              time.sleep(1)
              print(i)
              if not flag:
                  break
      
      
      if __name__ == '__main__':
          main()
      

    join

    # 线程对象调用join方法,会导致join后的代码在线程中的任务结束后才执行
    

    相关文章

      网友评论

          本文标题:Day19 线程

          本文链接:https://www.haomeiwen.com/subject/fezidqtx.html