ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

day 34 共享数据,初始进程池,进程池中的其他方法,进程池中的回调函数,线程的概念

2019-02-28 20:37:50  阅读:204  来源: 互联网

标签:__ 38884 数据共享 34 Manager 进程 import 池中


共享数据---了解

from multiprocessing import Manager

 

数据共享:速度很慢,牵扯到锁的问题            可以使用数据库来解决数据共享的问题

进程间数据是独立的,可以借助于队列或管道实现通信,二者都是基于消息传递的
虽然进程间数据独立,但可以通过Manager实现数据共享,事实上Manager的功能远不止于此

A manager object returned by Manager() controls a server process which holds Python objects and allows other processes to manipulate them using proxies.

A manager returned by Manager() will support types list, dict, Namespace, Lock, RLock, Semaphore, BoundedSemaphore, Condition, Event, Barrier, Queue, Value and Array.

Manager模块介绍

 

内部管理了很多数据类型
并不是所有的数据类型都是用来做数据共享
只是顺便包含了能够处理数据共享问题的数据类型



from multiprocessing import Manager,Process,Lock

def func(dic,lock):
    with lock:
        dic['count'] -= 1

if __name__ == '__main__':
    m = Manager()
    lock = Lock()
    dic = m.dict({'count':100})
    p_l = []
    for i in range(100):
        p = Process(target=func,args=(dic,lock))
        p.start()
        p_l.append(p)
    for p in p_l:p.join()
    print(dic)

 

 

进程池

进程池内每个进程的pid是不同的

异步提交

异步提交就是不可靠概念,不依赖于单个进程是否执行完毕,效率很高

多个进程可以利用多核cpu(进程池)

异步提交概念:多个进程利用多核cpu,如果可以忽略IO操作,这个时候我们启超过cpu个数过多的进程个数反而会降低程序的执行效率,反之会大大提高效率,进程池是用来处理多进程,并且有IO的时候发挥最大效率

未来我们用多进程解决的都是高计算型场景(忽略IO)

import os
import time
import random
from multiprocessing import Pool,Process

def func(i,):
    time.sleep(random.uniform(2,4))  #这里用sleep是为了模仿真实生产环境中执行任务时的延迟,这样就会让进程池内的四个进程都执行任务,如果没有延迟单个进程就会把任务执行完毕.
    print(i,os.getpid())  #这里了模仿提交一个任务,获取pid

if __name__ == '__main__':
    p = Pool()   #默认是根据cpu的个数来创建进程池的数量
    for i in range(20):
        p.apply_async(func,(i,))   #apply是提交任务,  async是异步 这里已经把任务提交到进程池内,在执行了
    p.close()  #必须告诉进程什么时候关闭,否则会随着我们进程的借宿而结束,关闭进程池,不允许再向这个池子中添加任务了
    p.join()  #阻塞,直到已经被提交到进程池的任务全部结束,执行完p.close和p.join之后就可以打印出执行任务的数据了

#结果   我们可以看到有四个不同的pid,说明四个进程都执行了任务
3 107496
1 62496
2 38884
0 20668
6 38884
7 20668
5 62496
4 107496
8 38884
9 20668
10 62496
11 107496
13 20668
12 38884
14 62496
15 107496
17 38884
16 20668
18 62496
19 107496

 

标签:__,38884,数据共享,34,Manager,进程,import,池中
来源: https://www.cnblogs.com/yanpeizhang/p/10452948.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有