美文网首页
Python编程之进程总结

Python编程之进程总结

作者: He | 来源:发表于2018-08-26 10:52 被阅读0次

进程是线程的集合,每个进程至少有一个主线程,进程是在系统中起资源调度的作用,进程分配资源和管理数据,程序的执行都是有线程执行的。进程和线程的执行差不多,也是由时间片根据并发机制执行的。Python中关于进程的内建模块multiprocessing,通过模块的Process类型,可以创建多个进程。
Lock/RLock,互斥锁/重用锁,进程锁类型、Event事件类型,Condition条件类型可以很方便的完成进程间的同步操作。Queue进程队列类型,用于多进程的数据共享。Listener/Client 进程监听,基于网络多进程间的数据共享。多进程面向对象的实现和多线程的操作类似。自定义进程类型,继承系统进程比哦准类型multiprocessing.Process,重写父类的run()方法,之方法中执行代码。在使用时创建该自定义进程类型的对象,
进程池:包含多个进程的池塘;包含并且管理多个进程的一个对象Pool
init(num) 初始化函数,用于创建一个进程池
apply(function, args) 同步执行一个函数~当进程中的函数执行完成才能退出
apply_async(function, args) 异步非阻塞执行一个函数
close()停止向进程池提交任务
join()让进程池工作完成,才能允许其他进程继续工作

import multiprocessing, time, os
def my_proc():
    print(multiprocessing.current_process().name, "一个进程正在工作", os.getppid(), os.getpid())
    time.sleep(1)
if __name__ == "__main__":
    # 创建一个进程池
    pool = multiprocessing.Pool(2
    # 循环任务
    for i in range(20):
        pool.apply_async(my_proc)
    # 停止提交任务
    pool.close()
    # 独占执行
    pool.join()

现在有一个问题,在进程中,操作变量数据是共享的吗。操作的变量数据都是独立的每个程序在操作系统数据的时候都会先将数据复制一下然后再操作复制的数据,系统内的数据并没有改变。所以进程之间的数据都是相互独立的!

问题:进程中,操作变量数据,是共享的吗?No 独立的

from multiprocessing import current_process, Process
import time

全局变量:可以被多个进程共享吗?

ticket = 3
def my_proc():
    # 1. 多个进程,能不能都读取到全局变量的值?True
    # for i in range(ticket):
    #     print(current_process().name, ":", i)
    # 2. 多个进程,使用的同一个全局变量的值,是共享的吗?
    global ticket
    while ticket > 0:
        print(current_process().name, ": " , ticket)
        ticket -= 1

3. 函数参数处理

#def my_proc(t):
    # while t > 0:
    #     print(current_process().name, ": ", t)
    #     t -= 1

if __name__ == "__main__":
    # 创建两个进程
    p1 = Process(target=my_proc)
    p2 = Process(target=my_proc)
    # p1 = Process(target=my_proc, args=(ticket,))
    # p2 = Process(target=my_proc, args=(ticket,))

    # 启动进程
    p1.start()
    p2.start()

    time.sleep(5)
    print(ticket)

问题:进程之间怎么完成数据共享|通信
import multiprocessing

解决方案1:通过第三方的东西进行交互
# A进程将数据存储到文件|数据库中
# B进程从文件|数据库中读取数据
# 文件|数据库是独立于A和B进程之外的第三方,能被A/B同时访问

解决方案2:通过第三方、独立于进程你之外的数据类型完成进程之间的通信
答案:可以!
python提供了如下几种方案

  1. 事件对象multiprocessing.Event-进程之间的状态标记通信
    '''
    threading.Event
    multiprocessing.Event
    '''
    event = multiprocessing.Event()
    2.multiprocessing模块中提供了条件类型Condition,可以完成多个进程之间的通信操作
    '''
    threading.Condition
    multiprocessing.Condition
    'acquire', 'notify', 'notify_all', 'release', 'wait', 'wait_for'
    '''

3.multiprocessing模块中提供了一个数据操作类型Queue,可以完成进程之间的数据简单共享
不推荐使用
'''
threading: queue.Queue队列实现线程间数据的安全共享
multiprocessing.Queue 进程队列

get()从队列中获取数据
get_nowait()从队列中获取数据,非阻塞
put()向队列中添加数据
put_nowait()向队列中添加数据,非阻塞
empty()判断队列是否为空
full()判断队列是否已满
qsize()获取队列中元素的个数
'''
4.multiprocessing提供了一个专门用来进行多个进程之间数据共享的类型:Manager
可以在本地多个进程之间完成数据共享和通信,可以在网络上远程的两个主机之间实现数据的共享和通信,可以在网络上远程的两个主机之间
'''
用于数据共享:存储数据
Array:数组
Queue:列表
list:用于创建一个存储数据的列表
ticket_box = multiprocessing.Manager.list()
dict:用于创建一个存储数据的字典
ticket_box = multiprocessing.Manager.dict()
Value:用于创建一个存储数据的变量
ticket = 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)

数据通信进程管理:
Lock/RLock:进程锁
Barrir:进程同步对象
Semaphore|BoundedSemaphore:信号量进程同步类型
Event:事件类型
Condition:条件类型
Pool:进程池类型

'''

相关文章

  • Python编程之进程总结

    进程是线程的集合,每个进程至少有一个主线程,进程是在系统中起资源调度的作用,进程分配资源和管理数据,程序的执行都是...

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

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

  • Python多进程

    在Python中如果想创建多进程需要用到multiprrocessing中的Prrocess方法。 在进程之间全局...

  • 多进程

    多进程简单理解: 进程之间是独立的,是操作系统自己来维护和管理的,python通过C接口起了一个进程,多进程可以充...

  • Python 多进程之间共享变量

    Python 多线程之间共享变量很简单,直接定义全局 global 变量即可。而多进程之间是相互独立的执行单元,这...

  • Python 3 多进程编程

    本文主要介绍基于python3.5的多进程的实现 1. 创建多进程脚本实例 2. 验证进程之间程序之间相互独立,资...

  • 记录runtime之Method Swizzling的实现

    事件处理:响应者链条 多线程总结下哈: 什么是进程?进程就是系统正在运行的一个程序。每个进程之间是独立的,每个进程...

  • 33.Python并发编程之多进程

    Python并发编程之多进程 什么是进程?进程是一个抽象的概念,进程的概念起源于操作系统,正在进行的一个过程或者一...

  • 第二章 进程的描述与控制5

    2.6 进程通信 1、进程通信是指进程之间的信息交换。 2、进程通信分为: 1)低级通信——进程之间的互斥和同步 ...

  • python多进程

    参考: python并发编程之多进程(实践篇)python中的多线程无法利用多核优势,如果想要充分地使用多核CPU...

网友评论

      本文标题:Python编程之进程总结

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