python多线程、进程(一)

本文详细介绍了进程和线程的基本概念,展示了Python中如何使用多进程和多线程进行编程,包括进程的创建、传参、守护模式,以及多线程的创建、线程信息获取和线程类的继承重定义。特别强调了多线程在I/O密集型程序中的优势。
摘要由CSDN通过智能技术生成

概述

进程是资源分配的最小单位,一个程序至少有一个进程。

线程是程序执行的最小单位,一个进程至少有一个线程。

一个进程中可以存在多个线程,在单核CPU中每个进程中同时刻只能运行一个线程,只有在多核CPU中才能存在线程并发的情况。

Python的多线程,只有用于I/O密集型程序时效率才会有明显的提高。


一、多进程

#多进程学习
#1.导入多进程包
import multiprocessing
import time


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

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

if __name__ == '__main__':
    #2.使用进程类创建进程对象
    sing_process = multiprocessing.Process(target=sing)
    dance_process = multiprocessing.Process(target=dance)

    #3.启动进程
    sing_process.start()
    dance_process.start()
    
#发现同时执行,不是单线程顺序执行


进程传参

#进程执行带参任务

#target:任务名

#args:元组方式传参args=(参数 ,) 、kwargs:字典方式传参 kwargs= {“参数名”:参数}

#元组顺序需要一致

    sing_process = multiprocessing.Process(target=sing,args=(3,"xiaom"))
    dance_process = multiprocessing.Process(target=dance,kwargs={"num":3})

获取进程编号

目的:获取进程编号便于管理

import os
#获取当前进程编号
os.getpid()
#获取当前父进程编号
os.getppid()

图1-1 终端输出结果

进程守护

    #2.使用进程类创建进程对象
    sing_process = multiprocessing.Process(target=sing)
    dance_process = multiprocessing.Process(target=dance)
    #主进程结束,子进程立刻结束。否则不结束(守护主进程)
    #设置守护
    sing_process.daemon = True

防止主进程结束子进程仍未结束

二、多线程

类似 于多进程

#多线程学习
#1.导入线程模块
import threading
#target:任务名
#args:元组方式传参args=(参数 ,) 、kwargs:字典方式传参 kwargs= {“参数名”:参数}
#元组顺序需要一致

import time

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

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

if __name__ == '__main__':
    #2.创建线程对象
    sing_thread = threading.Thread(target = sing,daemon=True)#创建时设置守护
    
    dance_thread = threading.Thread(target = dance)
    dance_thread.daemon = True #创建完设置守护
    #3.启动线程
    sing_thread.start()
    dance_thread.start()

获取线程信息(threading模块中的一些函数)

activeCount() :获取当前活动中的Thread对象个数
currentThread() :获取当前的Thread对象
enumerate() :获取当前活动的Thread对象列表 

join与主线程守护daemon

t1.join()#等待子线程结束运行,否则一直挂起

t1.daemon = True #创建完设置守护,必须在start()调用之前设置,如果不设置为守护线程程序会被无限挂起

thread类继承创建

#thread继承类方式创建
import threading


class MyThread(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)
    
    def run(self):
        print("1")

t1 = MyThread()

if __name__ == '__main__':
    t1.start()

 thread类重定义

#thread继承类方式创建
import threading


class MyThread(threading.Thread):
    def __init__(self,num):
        threading.Thread.__init__(self)
        self.num = num
    def run(self):
        print(self.num)

t1 = MyThread(1)
t2 = MyThread(2)

if __name__ == '__main__':
    t1.start()
    t2.start()

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值