当前位置:   article > 正文

python多进程多线程,多个程序同时运行_如果有很多的python job要同时跑

如果有很多的python job要同时跑

python 多线程 多进程同时运行

多任务要求

  1. python 基础语法
  2. python 文件目录操作
  3. python 模块应用

开发工具

pycharm

实现方法

多任务的实现可以用进程和线程来实现

进程—> 线程----> 多任务应用

多进程操作

比如下载多个文件, 利用cpu 资源 提高效率

多任务: 同一时间执行多个任务, 比如windows操作系统

执行方式有两种( 表现形式 )

并发

在单核cpu中:

在一段时间内交替执行多个任务, 例如单核cpu 处理多任务, 操作系统让各个任务交替进行

并行

多核cpu 给每个核都分配一个任务 每个核执行自己的任务

真正意义上的同时执行

如何实现( 原理 )

多进程

python 中实现多进程来实现多任务, 进程是操作系统进行资源分配和调度的最小单位, 一个运行起来的程序叫做进程, 没有在运行的程序叫做程序

当一个.py 文件运行的时候系统会创建一个主进程

比如

def fun1():
    print(1)
def fun2():
    print(2)
    
fun1()
fun2()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

代码运行的时候系统会先执行fun1 在执行fun2 按顺序运行

使用多进程的话: 在程序运行的时候会创建一个主进程, 那么在程序运行除了主进程之外创建一个子进程, 我们让主进程去执行fun1(), 让子进程去执行fun2(), 让他们两个同时执行, 来实现多任务同时进行

多进程完成多任务

首先要知道如何去创建第二个进程, 第三个进程, 进程的创建有三个步骤

  1. 导入进程包
    • import multiprocessing
  2. 通过进程类去创建进程对象
    • 进程对象=multiprocessing.Process()
  3. 启动进程执行任务
    • 进程对象.start() 来开始执行进程
import threading
import time
import os
def fun1():
    for i in range(3):
        print('1')
        time.sleep(1)

def fun2():
    for i in range(3):
        print('2')
        time.sleep(3)


if __name__ == '__main__':
    sing_thread = threading.Thread(target=fun1)
    song_thread = threading.Thread(target=fun2)

    sing_thread.start()
    song_thread.start()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
通过进程类创建进程对象

进程对象 = multiprocessing.Process(target= 任务名)

参数名说明
target执行的目标任务名, 这里指的是函数名(方法名)
name进程名, 一般不用设置(系统自动为进程设置默认名字Process-1····)
group进程组, 目前只能使用None

必须要指定进程的名字target

def none():
    pass
   
process = multiprocessing.Process(target=none)
process.start()
  • 1
  • 2
  • 3
  • 4
  • 5
进程如何执行带有参数的任务
参数名说明
args以元祖的方式给任务传递参数, 顺序要正确
kwrags以字典的方式给执行任务传递参数, key 跟参数名要一致

process = multiprocessing.Process(target=function, args=(10,)) arg传递的必须是参数所以传递一个变量的时候需要(10,)

process = multiprocessing.Process(target=function, kwargs={'key': value})

import multiprocessing
import time
import os

def fun1(num):
    print('1进程PID', os.getpid())
    print('1进程父进程编号', os.getppid())
    for i in range(num):
        print('1....\n')
        time.sleep(0.5)


def fun2(num):
    print('2进程PID', os.getpid())
    print('2进程父进程编号', os.getppid())
    for i in range(num):
        print('2...')
        time.sleep(0.5)

# 1. 导入进程包

if __name__ == '__main__':
    sing_process = multiprocessing.Process(target=fun1, args=(5,))
    dance_process = multiprocessing.Process(target=fun2, kwargs={'num':2}) # target

    #3. 启动进程
    sing_process.start()
    dance_process.start()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
获取进程编号
  1. 获取当前进程的编号
    • os.getpid()
  2. 获取当前父进程的编号
    • os.getppid()
import os 
os.getpid()
def work():
    print('work 进程编号', os.getpid())
    print('work 父进程编号', os.getppid())
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

主进程默认不会结束, 在子进程全部结束之后才会关闭主进程

在实际中我们想要的效果, 主进程关闭,, 子进程全部关闭

设置守护主进程

希望主进程关闭的时候子进程不在执行. 则需要设置守护选项

子进程对象.daemon=True 那么在主进程运行完成之后, 那么子进程也将会自动结束

os 部分操作
os 创建目标文件夹目录

os.mkdir(dir)

多线程

实现多任务的另一种形式, 进程是分配资源的最小单位, 线程是程序执行的最小单位, 一个进程中最少有一个线程来负责该进程, 比如一个QQ(一个进程) 打开了两个窗口(两个线程)跟两个人聊天, 线程自己并不需要系统资源, 线程与其他线程共享这个进程的资源, 因此使用多线程的时候实现了资源节约,

  1. 多线程是Python 程序中实现多任务的一种方式
  2. 线程是程序执行的最小单位
  3. 同属于一个进程的多线程共享进程拥有的所有资源
多线程实现多任务

线程的创建步骤

  1. 导入线程模块
    • import threading
  2. 通过线程类去创建线程对象
    • 线程对象=threading.Thread(target=任务名)
  3. 启动线程执行任务
    • 线程对象.start()
参数名说明
target执行目标的任务名, 这里值函数名( 方法名)
name线程名, 一般不用设置
group线程组, 目前只能使用None

其他的一毛一样

进程线程对比

关系对比

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

区别对比

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

优缺点对比

  1. 进程优缺点:

    优点:可以用多核

    缺点:资源开销大

  2. 线程优缺点

    优点: 资源开销小

    缺点:不能使用多核

本笔记总结于bilibili 黑马程序员
多进程多线程视频

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/74791
推荐阅读
相关标签
  

闽ICP备14008679号