美文网首页Python
python多任务--进程

python多任务--进程

作者: 小啊小狼 | 来源:发表于2020-10-15 09:55 被阅读0次

一、进程

进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。
进程是线程的容器,一个进程可以有多个线程

进程特征

  • 动态性:进程的实质是程序在多道程序系统中的一次执行过程,进程是动态产生,动态消亡的。
  • 并发性:任何进程都可以同其他进程一起并发执行。
  • 独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位。
  • 异步性:由于进程间的相互制约,使进程具有执行的间断性,即进程按各自独立的、不可预知的速度向前推进。

二、python多进程

创建多进程的两种方式:

  • 调用multiprocessing.Process模块
  • 重写multiprocessing.Process类的run方法

1、调用multiprocessing.Process模块创建进程

Process([group [, target [, name [, args [, kwargs]]]]]),由该类实例化得到的对象,表示一个子进程中的任务(尚未启动)

强调:

    1. 需要使用关键字的方式来指定参数
    1. args指定的为传给target函数的位置参数,是一个元组形式,必须有逗号
参数介绍

1 group参数未使用,值始终为None
2 target表示调用对象,即子进程要执行的任务
3 args表示调用对象的位置参数元组,args=('liang',)
4 kwargs表示调用对象的字典,kwargs={'name':'anne','age':18}
5 name为子进程的名称

from multiprocessing import Process

def work1(name):
    for i in range(4):
        time.sleep(1)
        print(f'{name}浇花的第{i + 1}秒')

def work2(name):
    for i in range(3):
        time.sleep(1)
        print(f'{name}打墙的第{i + 1}秒')


if __name__ == '__main__':
    p1 = Process(target=work1, args=('liang',))
    p2 = Process(target=work2, args=('小狼',))

    p1.start()
    p2.start()

    p1.join()
    p2.join()
    print('主线程执行完毕')

#输出
liang浇花的第1秒
小狼打墙的第1秒
小狼打墙的第2秒
liang浇花的第2秒
liang浇花的第3秒
小狼打墙的第3秒
liang浇花的第4秒
主线程执行完毕

2、重写multiprocessing.Process类的run方法

将要执行的任务写入run方法,同样的任务可以多线程并行执行

import time
from multiprocessing import Process

class MyProcess(Process):
    """自定义的进程类"""
    def __init__(self, name):
        super().__init__()
        self.name = name

    def run(self):
        for i in range(3):
            time.sleep(1)
            print(f'{self.name}浇花的第{i + 1}秒')
if __name__ == '__main__':

    q_list = []
    for i in range(2):  #创建4个线程并启动
        p = MyProcess(f"liang{i}")
        q_list.append(p)
        p.start()
    for q in q_list:   #等待启动的线程执行结束
        q.join()
    print('主进程执行完毕')

#输出
liang0浇花的第1秒
liang1浇花的第1秒
liang0浇花的第2秒
liang1浇花的第2秒
liang0浇花的第3秒
liang1浇花的第3秒
主进程执行完毕

注意:
多进程 执行,必须在main函数下, if __name__ == '__main__':

三、多进程之间通讯

多进程之间所有资源都是独立的,不能共享全局变量

queue.Queue模块只能在一个进行中使用,可以实现一个进程中的多个线程相互通讯

多个进程之间的相互通讯,需要用到--multiprocessing.Queue:可以多个进程之间共用(通讯)

"""
进程之间通信:使用队列
multiprocessing.Queue:可以多个进程之间共用(通讯)
queue.Queue模块只能在一个进行中使用,一个进程中多个线程使用
"""
from multiprocessing import Process, Queue

def work1(q):
    for i in range(5000):
        n = q.get()
        n += 1
        q.put(n)

    print("work1结束时候n的值:", n)


def work2(q):
    for i in range(5000):
        n = q.get()
        n += 1
        q.put(n)
    print("work2结束时候n的值:", n)


if __name__ == '__main__':
    q = Queue()
    q.put(100)
    p1 = Process(target=work1, args=(q,))
    p2 = Process(target=work2, args=(q,))

    p1.start()
    p2.start()

    p1.join()
    p2.join()
    print('两个子进程执行结束之后,主进程打印的n:', q.get())

#输出
work2结束时候n的值: 10090
work1结束时候n的值: 10100
两个子进程执行结束之后,主进程打印的n: 10100

相关文章

  • Python多线程多进程

    Python多线程多进程 QUICK START 1.[endif]进程和线程 1.1系统多任务机制 多任务操作的...

  • 2018-11-22进程,线程,协程

    进程:代码+资源,可以实现多任务线程:运行在进程中的最小单元,消耗资源小于进程 可以实现多任务协程:Python独...

  • Python3简单实现多任务(线程/协程篇)

    写在前面 上一篇文章[Python3简单实现多任务(多进程篇)]已经介绍了python多进程实现多任务的简单实现方...

  • 黑马上海37期Python全套视频课程

    教程目录:┣━Python就业班 ┃┣━02 多任务 ┃┃┣━02-进程 ┃┃┃┣━05-进程、线程的区别 ┃┃┃...

  • python多任务--进程

    一、进程 进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的...

  • Python多任务-进程

    进程的创建-multiprocessing multiprocessing模块就是跨平台版本的多进程模块,提供了一...

  • Python多任务_进程

    进程简单使用 Process([group [, target [, name [, args [, kwargs...

  • python多任务-进程

    程序是以二进制形式存放在硬盘之上的,当启动程序将数据(代码)加载至内存中就称之为进程。进程是一组资源(包括:代码,...

  • day24系统编程

    1python系统编程 1.1进程 1.1.1多任务的引入 单任务: 多任务: 说明: ·程序执行到os.fork...

  • 多进程和多线程编程

    多任务的实现方式: 多进程模式 多线程模式 多进程 + 多线程 模式python即支持多进程,又支持多线程,如下进...

网友评论

    本文标题:python多任务--进程

    本文链接:https://www.haomeiwen.com/subject/tlgipktx.html