Python多进程


多任务

概念:同一时间执行多个任务
作用:充分利用CPU资源,提高程序执行效率
表现形式:并发(操作系统交替执行多个任务,同一时间只有一个任务在执行)、并行(操作系统给每个CPU安排一个任务,这些任务是真正意义上的同时执行)

在Python中可以使用多进程多线程来实现多任务


多进程

进程:操作系统进行资源分配的基本单位。简单来说,一个运行起来的程序就是一个进程

  • 多进程实现多任务的步骤
    1)导包:import multiprocess
    2)创建进程对象:进程对象 = multiprocess.Process(target=任务名)
    参数 target:执行的目标任务名,代码里就是指定的函数名
    3)启动进程(通过进程对象启动进程来执行指定的任务):进程对象.start()

1. 单任务:

import time

def crosstalk():
    for i in range(2):
        print('听相声...')
        time.sleep(0.5)

def drink():
    for i in range(2):
        print('喝茶...')
        time.sleep(0.5)

if __name__ == '__main__':
    crosstalk()
    drink()

在这里插入图片描述

2. 多任务:

import time
import multiprocessing

def crosstalk():
    for i in range(2):
        print('听相声...')
        time.sleep(0.5)

def drink():
    for i in range(2):
        print('喝茶...')
        time.sleep(0.5)

if __name__ == '__main__':
    p1 = multiprocessing.Process(target=crosstalk)
    p2 = multiprocessing.Process(target=drink)
    p1.start()
    p2.start()

在这里插入图片描述
3. 带有参数的多任务:

两种传参方式:元组(args)字典(kwargs)
以元组方式传参,参数顺序一定要保持一致
以字典方式传参,参数名一定要保持一致

import time
import multiprocessing

def crosstalk(num):
    for i in range(num):
        print('听相声...')
        time.sleep(0.5)

def drink(num, name):
    for i in range(num):
        print('%s喝茶...'%name)
        time.sleep(0.5)

if __name__ == '__main__':
    p1 = multiprocessing.Process(target=crosstalk, args=(3,))  #元组元素个数为1时,需在后面加逗号,
    p2 = multiprocessing.Process(target=drink, kwargs={"num": 2, "name": "明明"})
    p1.start()
    p2.start()

在这里插入图片描述
4. 获取进程编号:

1)导包:import os
2)获取当前进程编号:os.getpid() 获取父进程编号:os.getppid()


注意事项

  1. 默认主进程会等待所有的子进程执行结束后再结束
  2. 设置守护主进程,当主进程结束,子进程直接销毁:子进程对象.daemon = True

实例:文件多任务拷贝

import os
import multiprocessing

def copy_file(file_name, source_dir, dest_dir): #实现文件内容的拷贝
    source_file = source_dir + '/' + file_name #原文件
    dest_file = dest_dir + '/' + file_name  #目标文件
    with open(source_file, 'rb') as source_file: #以读方式打开原文件
        with open(dest_file, 'wb') as dest_file: #以写方式打开目标文件
            
            while True:
                data = source_file.read(1024) #每次读1KB
                if data:
                    dest_file.write(data)
                else:
                    break


if __name__ == '__main__':
    source_dir = 'E:\\test' #原文件夹
    dest_dir = 'E:\dest_dir' #目标文件夹
    try:  #创目标文件夹
        os.mkdir(dest_dir)  
    except:
        print("该文件夹已存在")
    
    file_list = os.listdir(source_dir) #将原文件夹中的文件名放在列表中
    for file_name in file_list: #为每一个文件创建一个拷贝进程
        work_process = multiprocessing.Process(target=copy_file, 
                                               args=(file_name, source_dir, dest_dir)) 
        work_process.start()


总结

本文是边看视频边写的学习笔记,做个记录加深印象。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值