Python中的多进程与多线程

本文介绍了Python中进程和线程的基本概念,如何通过`multiprocessing`和`threading`库创建和管理进程和线程,以及它们在资源分配、调度和参数传递方面的区别。通过实例展示了多进程和多线程执行任务的效果。
摘要由CSDN通过智能技术生成

进程是分配资源的基本单位, 一旦创建一个进程就会分配一定的资源;

线程是cpu调度的基本单位,每个进程至少都有一个线程,而这个线程就是我们通常说的主线程。

1. 导入进程工具包 import multiprocessing

# 导包
import multiprocessing

2. 通过进程类 实例化进程对象 子进程对象 = multiprocessing.Process(target=任务名)

p1 = multiprocessing.Process(target=coding)

3. 启动进程执行任务 子进程对象.start()

p1.start()

进程实例:

# 1. 定义函数, 表示: 敲代码.
def coding():
    for i in range(2):
        print(f'敲代码.... {i}')


# 2. 定义函数, 表示: 听音乐.
def music():
    for i in range(2):
        print(f'听音乐.... {i}')


# 3. 定义main函数, 因为子进程是根据主进程(main进程)创建出来的.
if __name__ == '__main__':
    # 4. 创建进程1, 关联: coding函数
    p1 = multiprocessing.Process(target=coding)
    # 5. 创建进程2, 关联: music函数
    p2 = multiprocessing.Process(target=music)
    # 6. 开启上述的两个进程, 看看多任务(多进程)执行效果.
    p1.start()
    p2.start()
# 打印结果:
敲代码.... 0
敲代码.... 1
听音乐.... 0
听音乐.... 1

1. 导入线程模块:import threading

import threading

2. 通过线程类创建线程对象 :线程对象 = threading.Thread(target=任务名)

t1 = threading.Thread(target=music)

3. 启动线程执行任务:线程对象.start()

t1.start()

举例说明:

# 1. 导包
import threading

# 2. 定义函数, 听音乐
def music():
    for i in range(2):
        print(f'正在听第 {i} 首音乐')

# 3. 定义函数, 敲代码
def coding():
    for i in range(2):
        print(f'正在敲第 {i} 行代码')

# 主进程/主线程.
if __name__ == '__main__':
    # 4. 创建子线程.
    t1 = threading.Thread(target=music)
    t2 = threading.Thread(target=coding)

    # 5. 开启线程.
    t1.start()
    t2.start()
# 打印结果:
正在听第 0 首音乐
正在听第 1 首音乐
正在敲第 0 行代码
正在敲第 1 行代码

关于进程和线程都有抢占资源的情况,因为子进程和子线程是同时开始的

小张正在听第 0 首音乐...
小张 正在敲第 0 行代码
小张 正在敲第 1 行代码小张正在听第 1 首音乐...

小张 正在敲第 2 行代码
小张正在听第 2 首音乐...
小张正在听第 3 首音乐...
小张 正在敲第 3 行代码

无论是进程还是线程都可以传递参数

子进程对象 = multiprocessing.Process(target=任务名,args/kwargs=要传递的参数)

p1 = multiprocessing.Process(target=coding,args=('小明',5))
p2 = multiprocessing.Process(target=coding,kwargs={'name' : '小明', 'count' : 5})

线程对象 = threading.Thread(target=任务名,args/kwargs=要传递的参数)

 t1 = threading.Thread(target=write, args=('小明',5))
 t2 = threading.Thread(target=music, kwargs={'name' : '小明', 'count' : 5})

多进程与多线程的区别:

1. 线程是依附在进程里面的,没有进程就没有线程,一个进程默认提供一条线程,进程可以创建多个线程。

2.进程之间不共享全局变量,线程之间共享全局变量

3.进程是操作系统资源分配的基本单位,线程是CPU调度的基本单位

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值