python 多线程

本文详细介绍了Python中的多任务编程,包括进程和线程的概念、作用、创建步骤以及参数传递。通过实例展示了如何创建和管理进程与线程,讨论了守护进程和线程,以及并发与并行的区别。此外,还对比了进程和线程的优缺点,强调了它们在资源管理和执行效率上的差异。
摘要由CSDN通过智能技术生成

多任务:

多任务的概念: 同一时间执行多个任务

多任务的作用:充分的利用cpu资源提高程序的效率

多任务的表现形式:

并发:操作系统执行任务时是以交替的执行方式

并行: 操作系统执行任务时会给每个cpu安排任务这种才是同时执行

进程:

什么是进程:

进程是操作系统资源分配的基本单位,程序运行起来就叫进程

进程的作用

使用多进程能实现多任务的编程

进程的创建步骤:

1.导入进程包:

import  multiprocessing

2.通过进程类创建进程对象

进程对象=multiprocessing.Process(target= ,name= ,group=)
				target:执行的任务名,这里指的是函数名
				name: 进程名,一般不设置
				group: 进程组,目前智能使用None

3.启动进程执行任务:

进程对象.start()

实例:

import multiprocessing
import time

def sing():
    for i in range(3):
        print("唱歌...")
        time.sleep(0.5)

def dance():
    for i in range(3):
        print("跳舞..")
        time.sleep(0.5)

if __name__=="__main__":
    process_sing=multiprocessing.Process(target=sing)
    process_dance=multiprocessing.Process(target=dance)
    process_sing.start()
    process_dance.start()

进程执行带有参数

元组传参(args):

进程对象=multiprocessing.Process(target=执行的函数名,args=(值1,))

字典传参(kwargs):

进程对象=multiprocessing.Process(target=dance,kwargs={“参数名”:值1})

获得进程编号

导包:

import os

获得当前进程编号:

os.getpid()

获得当前父进程编号:

os.getppid()

设置子进程守护主进程(daemon)

要是想主进程结束后子进程也结束就得设置因为:
主进程会等所有的子进程执行结束后在结束,除非设置子进程守护主进程.

语法:

子进程对象.daemon=True

线程

什么是线程:

多线程是python程序中实现多任务的一种方式

线程是程序执行最小的单位

同属一个进程的多个线程共享进程所有的全部资源

多线程的优点:

多线程类似于同时执行多个不同程序,多线程运行有如下优点:

  • 使用线程可以把占据长时间的程序中的任务放到后台去处理。

  • 用户界面可以更加吸引人,比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度。

  • 程序的运行速度可能加快。

  • 在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。在这种情况下我们可以释放一些珍贵的资源如内存占用等等。

线程创建的步骤:

1.导入线程模块

import threading

2.通过线程类创建线程对象

sing_thread=threading.Thread(target=sing)

3.启动线程执行任务

sing_thread.start()

线程对象=hreading.Thread(target= ,name= ,group=)
				target:执行的任务名,这里指的是函数名
				name: 线程名,一般不设置
				group: 进程组,目前智能使用None

线程带参数执行任务

实例;

import threading
import time

def sing(num,name):
    for i in range(num):
        print(name+"..唱歌..")
        time.sleep(1)

def dance(count,name):
    for i in range(count):
        print(name+"..跳舞..")
        time.sleep(1)

if __name__ == "__main__":

        # args: 以元组的方式给执行任务传递参数
        sing_thread=threading.Thread(target=sing,args=(3,"小"))

        # kwargs:以字典方式给执行任务传递参数
        dance_thread=threading.Thread(target=dance,kwargs={"count":2,"name":"xiao"})

        sing_thread.start()
        dance_thread.start()

设置守护主线程的两种方法:

实例:

import threading
import time

def work():
    for i in range(3):
        print("..工作..")
        time.sleep(1)



if __name__ == "__main__":

        # sing_thread=threading.Thread(target=work)
        #
        # sing_thread.start()

        # 主线程结束时不想等待子线程结束在结束
        # 方法一:
        # sing_thread = threading.Thread(target=work,daemon=True)
        # 方法二:
        sing_thread = threading.Thread(target=work)
        sing_thread.setDaemon(True)
        sing_thread.start()

        print("...主线程结束了...")

线程之间执行时无序的

进程和线程的对比:

关系对比:
1. 线程时依附在进程里面的,没有进程就没有线程
2. 一个进程默认提供一条线程,进程可以创建多个线程
在这里插入图片描述

区别对比:
1.创建进程的资源要比创建线程的资源开销要大
2.进程时操作系统资源分配的基本单位,线程是cpu调度的基本单位
3.线程不能独立执行必须依附在进程

优缺点对比
1.进程优缺点:
优点:可以用多核
缺点:资源开销大
2.线程优缺点:
优点 :资源开销小
缺点:不能使用多核

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值