多进程

作者: ZAK_ML | 来源:发表于2019-03-17 18:59 被阅读0次

创建进程

import multiprocessing as mp

import threading as td

def job(a,d):

    print('aaaaa')

if_name='_main_':   #要在这个框架下运用它,不然会报错

    p1=mp.Process(target=job,arg=(1,2))   #创建进程

    p1.start()

    p1.join()

queue输出

def job(q):

    res=0

    for i in range(1000):

        res+=i+i**2+i**3

    q.put(res)

if_name='_main_': 

    q=mp.Queue()

    p1=mp.Process(target=job,arg=(q,))   #q后要有逗号,不然会报错

    p2=mp.Process(target=job,arg=(q,))

    p1.start()

    p2.start()

    p1.join()

    p2.join()

    res1=q.get()

    res2=q.get()

    print(res1+res2)

进程池pool

之前的process中的job是不能有返回值的,只能把返回值放在Q里。在pool里有return

def job(x):

    return x*x

def multicore():

    pool=mp.Pool(processes=2) #使用2个核

    res=pool.map(job,range(10))

    print(res)    

    res=pool.apply_async(job,(2,))  #传入的是一个元组,单元素元组定义必须有逗号

    print(res.get())

    multi_res=[pool.apply_async(job,(i,)) for i in range(10)]

    print([res.get() for res in multi_res])

    pool.close()   #关闭pool,使其不在接受新的(主进程)任务

    pool.join()

共享内存

value=mp.Value('i',1)   #定义一个变量,可以被每个cpu读取。i为整数,d为小数

array=mp.Array('i',[1,2,3])   #列表,不能是多维的

lock锁

def job(v,num,l):

    l.acquire()  #加锁

    for _ in range(10):

        time.sleep(0.1)

        v.value+=num

        print(v.value)

    l.release()  #取消锁

def multicore():

    l=mp.Lock()

    v=mp.Value('i',0)

    p1=mp.Process(target=job,args(v,1,l))

    p2=mp.Process(target=job,args(v,3,l))

    p1.start()

    p2.start()

    p1.join()

    p2.join()


加锁的目的是为了保证多个进程修改同一块数据时,同一时间只能有一个修改,即串行的修改,没错,速度是慢了,牺牲了速度而保证了数据安全。


python multiprocessing 如何在主进程中捕获子进程抛出的异常,适用于子进程无返回值的场景

Python3之无法在进程池中使用队列Queue的解决方案

multiprocessing.Queue()和manger().Queue()的区别

queue.Queue(),实现一个大小固定的队列

相关文章

  • UNIX基础--进程和守护进程

    进程和守护进程 Processes and Daemons 进程(Processes) FreeBSD 是一个多任...

  • rsync服务企业应用

    守护进程服务企业应用: 守护进程多模块功能配置 守护进程的排除功能实践 守护进程来创建备份目录 守护进程的访问控制...

  • Nginx 的进程结构,你明白吗?

    Nginx 进程结构 这篇文章我们来看下 Nginx 的进程结构,Nginx 其实有两种进程结构: 单进程结构 多...

  • 进程/线程

    进程和线程 多任务的介绍 进程的介绍 多进程完成多任务 获取进程编号 进程的注意点 文件夹高并发copy器 1、多...

  • 多易日记进程

    10.29 解决移动端适配问题:采用手淘写的lib-flexible解决移动端的适配,采用pxToRem解决px转...

  • 使用ipc为 electron 实现一个无用的通信轮子

    入门学习electron时了解到,渲染进程与主进程存在一对多的关系, 渲染进程与主进程需要通过ipc或remote...

  • mysql(三)

    MySQL多实例 什么是实例? 一个进程+多个线程+预分配的内存结构 什么是多实例? 多个进程+多个线程+多个预分...

  • 线程和线程池

    线/进程、多线/多进程、线程并发/并行 一、线程、进程概念 进程:是程序的一次运行活动,由系统资源分配和调度的一个...

  • Python札记52_进程和线程2

    在之前的札记Python札记50_进程和线程1中介绍了进程、线程和子进程以及多进程的相关知识,本札记中重点介绍多线...

  • 5. python多进程锁-实现简易抢票

    一、主题 Lock类与RLock类相同:由于进程之间随机调度:某进程可能执行n条后,CPU接着执行其他进程。为了多...

网友评论

      本文标题:多进程

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