多进程

作者: Captain_tu | 来源:发表于2017-10-30 11:17 被阅读22次

multiprocess 模块

  1. process

     from multiprocessing import Process, Pool
     import time
     import random
     import os
    
     def run_task(name):
         print "Child process %s(%s) is running." % (name, os.getpid())
    
     if __name__ == "__main__":
         print "Current process %s." % os.getpid()
         for i in range(5):
             p = Process(target=run_task, args=(str(i), ))
             p.start()
             p.join()
         
         print "Waiting for subprocess done"
    

    process.join用来阻塞进程,等上一个p进程执行完,才往下继续执行
    如果没有指定target,默认执行process.run方法

  2. pool
    创建容量为3的线程池,并依次向其中加入5个任务,从结果看,虽然添加了5个任务,但是一开始只运行了其中的3个,而且每次最多运行3个,当一个任务结束了,新的任务添加进来,任务 执行使用的进程依然是原来的进程,这一点从进程的pid可以看出来

     from multiprocessing import Process, Pool
     import time
     import random
     import os
    
     def run_task(name):
         print "Child process %s(%s) is running." % (name, os.getpid())
         time.sleep(random.random() * 4)
         print "Child process %s(%s) end." % (name, os.getpid())
    
     if __name__ == '__main__':
         print "Current process %s." % os.getpid()
         p = Pool(processes=3)
         for i in range(5):
             p.apply_async(run_task, args=(str(i), ))
         print "Waiting for all subprocess done..."
         p.close()    #调用join之前,必须调用close,调用close之后,不能再向进程池中添加进程
         p.join()
         print "All subprocess done..."
    
pool.png
  1. 进程间通信
    创建了大量的进程,就必须进程间的通信,python提供多种进程间通信的方式,例如Queue,Pipe,Value+Array等
    Queue和Pipe的区别在于,Pipe主要用来两个进程间通信,Queue用来多个进程间通信

    1. Queue是多进程安全的队列,可以使用Queue实现多进程之间的数据传递
      • Put方法用来向队列中插入数据,可选参数为blocked,timeout,如果blocked为True(默认值),并且timeout为正值,该方法会阻塞timeout指定的时间,直到该队列有剩余的空间,如果超时,会抛出Queue.Full异常,如果blocked为False,改Queue已满,则立即抛出Queue,Full异常

      • Get方法可以从队列中读取并删除一个元素,可选参数为blocked,timeout,如果blocked为True(默认值),并且timeout为正值,那么在等待的timeout时间内没有取到任何元素,会抛出Queue.Empty异常,如果blocked为False,Queue中有一个值,则立即返回该值,否则立即抛出Queue.Empty异常

相关文章

  • 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/rhjgjxtx.html