美文网首页
Python——多进程操作

Python——多进程操作

作者: 阿猫阿狗py | 来源:发表于2018-08-23 19:21 被阅读42次

进程是正在执行中的应用程序,一个进程包含了该应用程序的所有信息。
计算机中多线程的操作已经可以实现多人物的处理机制了,但是如果涉及到多核CPU或者多个CPU的硬件主机,多进程并发编程的实现能比多线程并发机制更加有效的利用和发挥硬件资源优势。

进程类型中的属性和方法
os

getpid(): 获取进程编号
getppid():获取父进程编号

Process

name:进程名称
ident:进程编号
daemon:是否守护进程,默认False
start():启动进程
run():进程执行方法
terminate():结束进程
is_alive():判断进程是否存活
join():独占模式,当前的进程执行结束后才会执行下一个进程

基本语法:

面向函数的操作:多进程
面向类型的操作:多进程
如果对于进程的状态管理并不是特别精确,只是需要多个进程工作。则可以使用进程池
进程池:{Process Pool}

进程池:存放多个进程
Python进程池,可以直接申请多个进程,提交你的任务即可
创建一个进程池:pool = multiprocessing.Pool(2) #表示一个存放2个进程的进程池存在了
pool.apply_async(my_func)
池塘.处理任务(函数,参数)->通过池塘中的进程执行

#多进程的两种实现
import multiprocessing,time,os

def my_func():
    print(multiprocessing.current_process().name,"一个进程正在工作",os.getpid(),os.getppid())
    time.sleep(1)

if __name__ == "__main__":
    #进程池里面存放了两个进程
    pool = multiprocessing.Pool(2)

    for i in range(20):
        pool.apply_async(my_func)
#停止提交任务
    pool.close()
    #独占执行
    pool.join()

apply(function,args)同步执行一个函数~当进程中的函数执行完成才能退出
apply_async(function,args)异步非阻塞执行一个函数
close()停止向进程池提交任务

注意:如果主进程退出之前,进程池没有停止提交任务,该进程就无法申请内存去运行;所以时一个无效的进程池,直接退出。
join()让进程池工作完成,才能允许其他进程继续工作

进程中的数据处理问题
  1. 多个进程,都能读取到全局变量的值。
  2. 多个进程使用的全局变量的值不是共享的,只是在各自的进程中复制了一份。
    进程中的数据共享:
    1. 通过第三方的东西进行交互
    a) A进程将数据存储到文件|数据库中
    b) B进程从文件|数据库中读取数据
    c) 文件/数据库是独立于A和B进程之外的第三方,能被A|B同时访问

2. 通过第三方,独立于进程之外的数据类型完成进程之间的数据共享

Python提供了几种方案:

a) 事件对象multiprocessing.Event进程之间的状态标记
b) multiprocessing模块中提供了条件类型Condition,可以完成多个进程之间的通信
c) multiprocessing模块中提供了一个数据操作类型Queue,可以完成进程之间的数据通信
multiprocessing.Queue进程队列

get()从队列中获取数据
get_nowait()从对列中获取数据,非阻塞
put()向队列中添加数据
put_nowait()向队列中添加数据,非阻塞
empty()判断队列是否为空
full()判断队列是否已满
qsize()获取队列中元素的个数

d ) multiprocessing提供了一个专门用来进行多个进程之间数据共享的类型:Manager

m = multiprocessing.Manager()
备注:可以在本地多个进程之间完成数据共享和通信,可以在网络上远程的两个主机之间实现数据共享和通信
用于数据共享:存储数据

Array:数组
list:创建一个存储数据的列表
a = multiprocessing.Manager.list()
dict:创建一个存储数据的字典
b = multiprocessing.Manager.dict()
Value:创建一个存储数据的变量
c = multiprocessing.Manager.Value(‘count’,100)
type a:
manager = Manager()
my_list = manager.list()
my_dict = manager.dict()
my_value = manager.Value(‘count’,100)
type b:
with Manager() as manager:
my_list = manager.list()
my_dict = manager.dict()
my_value = manager.Value(‘count’,100)

3. 数据通信进程管理

Lock/RLock:进程锁
Barrir:进程同步对象
Semaphore|bOUNDEsEMAPHORE

相关文章

  • s9python并发编程

    python之路——操作系统的发展史python之路——博客目录 书籍推荐:现代操作系统 进程 进程 join()...

  • 计算机基础

    Python基础 列表与元组的区别 Python多进程 操作系统基础 操作系统与多进程 计算机网络基础 三次握手 ...

  • 第9天续,进程

    @(python)[笔记] 目录 一、什么是进程 1.1 进程的概念 进程的概念起源于操作系统,是操作系统最核心的...

  • python笔记-使用多线程技术加速爬虫

    multiprocessing是Python的一个多进程库,它可以实现多进程的操作。但是由于进程与进程之间不能直接...

  • python 07 进程和线程

    多进程。 要让Python程序实现多进程(multiprocessing),我们先了解操作系统的相关知识。 Uni...

  • Python实战计划——第二周第三节:多进程爬虫的数据抓取

    Python set的操作多进程multiprocessing中进程池Pool()以及方法map的用法更为详细的有...

  • Python——多进程操作

    进程是正在执行中的应用程序,一个进程包含了该应用程序的所有信息。计算机中多线程的操作已经可以实现多人物的处理机制了...

  • Python 多进程操作

    进程与线程1.定义进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个...

  • 【python】进程间通信:Queue的详细用法

    关于python 进程间通信 Process之间有时需要通信,操作系统提供了很多机制来实现进程间的通信。 进程间通...

  • python 多进程和多线程

    多进程 要让python程序实现多进程,我们先了解操作系统的相关知识。 Unix、Linux操作系统提供了一个fo...

网友评论

      本文标题:Python——多进程操作

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