Python日志24

多线程和多进程学习总结

一、概念
  1. 什么是进程

    一个正在运行的应用程序就是一个进程

    每一个进程均运行在其专用且受保护的内存(运行内容)中

  2. 什么是线程

    线程是进程执行任务的基本单元

    线程要做什么事情,或者要干什么必须要有线程

  3. 线程的特点 —— 串型

    如果在一个线程中执行多个任务,任务是串行执行(一个一个的按照顺序)

  4. 多线程

    默认情况下一个进程只有一个线程,多线程指的是在一个进程中有多个线程

    多线程执行不同的任务可以并行(同时)执行

    注意:多线程可以提高程序执行效率,但不是越多越好(计算机一般的应用程序不要超过100个,爬虫可以到达200到300个)

二、多线程
  1. 主线程和子线程

    一个进程默认只有一个线程,这个线程叫主线程。除了主线程以外的线程都叫子线程

    如果进程中需要子线程,只能自己创建(创建线程类或者线程类的子类对象)

    from threading import Thread, current_thread
    
  2. 单线程的串行

    def download(name) :
    	print(f'{name}开始下载:{datetime.now()}')
        time.sleep(2)
    	print(f'{name}下载结束:{datetime.now()}')
    
    download('1')
    download('2')
    download('3')
    
  3. 创建三个子线程,下载三个文件

    • 创建线程对象,并且分配线程任务:Thread(* ,target, args)

      target — 需要在子线程中调用的函数,需要给一个普通函数的函数名(代表任务)

      args — 在子线程中调用target对应的函数的时候需要的参数对应的元组。如果需要几个实参,元组就给几个元素

      t1 = Thread(target=download,args=('1',))
      t1 = Thread(target=download,args=('2',))
      t1 = Thread(target=download,args=('3',))
      
    • 启动线程:线程对象.start()

      t1.start()
      t2.start()
      t3.start()
      
  4. 线程阻塞

    • 阻塞线程 —— 等到某个线程的任务结束才接着执行

      线程对象.jion()

三、多进程
  1. 多线程

一个应用程序默认只有一个进程(主进程),每一个进程中默认一个线程(主线程)

一个程序可以有多个进程(除了主进程以外的进程叫子进程),任何一个进程中又可以有多个线程

如果需要程序中有子进程,需要自己创建进程对象(创建的进程中都自带一个线程)

from multiprocessing import Process
  1. 使用多进程

    • 创建进程对象

      from multiprocessing import Process
      from datetime import datetime
      import time
      
      
      def download(name):
          print(f'{name}开始下载:{datetime.now()}')
          time.sleep(2)
          print(f'{name}下载结束:{datetime.now()}')
      
      if __name__ == '__main__' :
          p1 = Process(target=download, args=('1',))
      	p2 = Process(target=download,args=( '2',))
      	p3 = Process(target=download, args=('3',))
      
    • 启动进程

      p1.start()
      p2.start()
      p3.start()
      
    • 阻塞进程

      p1.join()
      p2.join()
      p3.join()
      print('下载完成! ')
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值