多进程-multiprocess

方法(类似于threading):

  • is_alive()
  • join(timeout)
  • run()
  • start() #开始某个进程

属性:

  • daemon(要通过start()设置,并在之前设置)
  • exitcode(进程在运行时为None、如果为–N,表示被信号N结束)
  • name #线程的名称
  • pid #线程的pid

多进程运行方式:
1.函数调用

#!/usr/bin/env python
#coding:utf-8
from multiprocessing import Process
import time
def run(info_list,n):
    info_list.append(n)
    print info_list

info=[]
for i in range(10):
    p = Process(target=run,args=(info,i))
    p.start()

print p.pid
print p.name
print p.is_alive()

2.通过类继承运行

#!/usr/bin/env python
#coding:utf-8
import multiprocessing
import time
class MyProcess(multiprocessing.Process): #继承Process
    def __init__(self, interval):
        multiprocessing.Process.__init__(self)
        self.interval = interval
    def run(self):
        print "Begin----"
        myfunction(self.interval)
        print "End-----"

def myfunction(ms):
    n = 5
    while n > 0:
        print("the time is %s" %format(time.ctime()))
        time.sleep(ms)
        n -= 1

if __init__== ‘__main__‘:
    p = MyProcess(1)
    p.daemon = True  #当子进程设置了daemon属性时,默认为false,主进程结束,子进程也随之结束
    p.start()  #进程p调用start()方法时,自动调用run()方法
    time.sleep(3)
    print "Main Process is Over...."

Pool

Pool可以提供指定数量的进程,给用户调用,当有新的请求提交到pool中时,如果池还没有满,那么就会创建一个新的进程用来执行该请求;但如果池中的进程数已经达到规定最大值,那么该请求就会等待,直到池中有进程结束,才会创建新的进程来它。

方法:

  • apply_async(func[, args[, kwds[, callback]]]) 它是非阻塞,apply(func[, args[, kwds]])是阻塞的
  • close() 关闭pool,使其不再接受新的任务
  • terminate() 结束工作进程,不在处理未完成的任务
  • join() 主进程阻塞(挂起),等待子进程的退出,join方法要在close或者terminate之后才能使用
#!/usr/bin/env python
#coding:utf-8
from multiprocessing import Pool
import time
def f(x):
    print x*x
    time.sleep(1)
    return x*x

pool = Pool(processes=5) #最多5个进程
res_list = []
print "------------"
print "执行方法一"
#执行方法一
print pool.map(f,range(10))  #将函数放在5个进程中执行
print "end 01 -------"

#执行方法二
print "执行方法二"
for i in range(10):
    res = pool.apply_async(f,(i,)) #apply_async 设置为异步
    #res.get() #取线程执行的结果
    res_list.append(res)  #将执行结果放入列表中
for r in res_list: #循环列表得到结果
    print r.get()
print "Over ..."
时间: 2024-10-24 19:54:44

多进程-multiprocess的相关文章

Python程序中的进程操作-开启多进程(multiprocess.process)

目录 一.multiprocess模块 二.multiprocess.process模块 三.process模块介绍 3.1 方法介绍 3.2 属性介绍 3.3 在windows中使用process模块的注意事项 四.使用process模块创建进程 4.1 在Python中启动的第一个子进程 4.2 join方法 4.3 查看主进程和子进程的进程号 4.4 多个进程同时运行 4.5 多个进程同时运行,再谈join方法(1) 4.6 多个进程同时运行,再谈join方法(2) 4.7 通过继承Pro

队列,event,multiprocess

队列:queue queue is especially useful in threaded programming when information must be exchanged safely between multiple threads. 有三种队列模式 class queue.Queue(maxsize=0) #先入先出 class queue.LifoQueue(maxsize=0) #last in fisrt out  class queue.PriorityQueue(

36. Python 多进程

多进程概念: 进程是程序在计算机上的一次执行活动.当你运行一个程序,你就启动了一个进程.显然,程序是死的(静态的),进程是活的(动态的).进程可以分为系统进程和用户进程.凡是用于完成操作系统的各种功能的进程就是系统进程,它们就是处于运行状态下的操作系统本身:用户进程就不必我多讲了吧,所有由你启动的进程都是用户进程.进程是操作系统进行资源分配的单位. 它的思想简单介绍如下:在操作系统的管理下,所有正在运行的进程轮流使用CPU,每个进程允许占用CPU的时间非常短(比如10毫秒),这样用户根本感觉不出

011_Python中单线程、多线程和多进程的效率对比实验

Python是运行在解释器中的语言,查找资料知道,python中有一个全局锁(GIL),在使用多进程(Thread)的情况下,不能发挥多核的优势.而使用多进程(Multiprocess),则可以发挥多核的优势真正地提高效率. 对比实验 资料显示,如果多线程的进程是CPU密集型的,那多线程并不能有多少效率上的提升,相反还可能会因为线程的频繁切换,导致效率下降,推荐使用多进程:如果是IO密集型,多线程进程可以利用IO阻塞等待时的空闲时间执行其他线程,提升效率.所以我们根据实验对比不同场景的效率 操作

SGI的特殊空间配置器

SGI的空间配置器allocator只是简单的new和delete的一层包装,没有提供效率的强化. 而一般C++内存配置和释放操作如下: class  Foo  { ... } Foo  *pf = new Foo; delete pf; new算式:1)使用new配置内存,2)使用Foo构造对象 delelte算式: 1)使用~Foo()将对象析构 ,2)使用delete释放内存 STL allocator 将这两阶段操作区分开来.内存配置操作由 alloc::allocate() 负责,内存

python并发

并发方式 线程(Thread) 多线程几乎是每一个程序猿在使用每一种语言时都会首先想到用于解决并发的工具(JS程序员请回避),使用多线程可以有效的利用CPU资源(Python例外).然而多线程所带来的程序的复杂度也不可避免,尤其是对竞争资源的同步问题. 然而在python中由于使用了全局解释锁(GIL)的原因,代码并不能同时在多核上并发的运行,也就是说,Python的多线程不能并发,很多人会发现使用多线程来改进自己的Python代码后,程序的运行效率却下降了,这是多么蛋疼的一件事呀!如果想了解更

使用Python进行并发编程

让计算机程序并发的运行是一个经常被讨论的话题,今天我想讨论一下Python下的各种并发方式. 并发方式 线程(Thread) 多线程几乎是每一个程序猿在使用每一种语言时都会首先想到用于解决并发的工具(JS程序员请回避),使用多线程可以有效的利用CPU资源(Python例外).然而多线程所带来的程序的复杂度也不可避免,尤其是对竞争资源的同步问题. 然而在python中由于使用了全局解释锁(GIL)的原因,代码并不能同时在多核上并发的运行,也就是说,Python的多线程不能并发,很多人会发现使用多线

python进程编程

多进程multiprocess模块 multiprocessing is a package that supports spawning processes using an API similar to the threading module. The multiprocessing package offers both local and remote concurrency, effectively side-stepping the Global Interpreter Lock 

Python入门(目录全览)

目录 Python入门(目录全览) 第一篇 markdown编辑器 第二篇 计算机基础 第三篇 Python解释器和集成环境 第三篇 Python基础 第四篇 Python进阶 第五篇 文件处理 第六篇 函数基础 第七篇 函数进阶 第八篇 模块基础 第九篇 Python常用模块 第十篇 面向对象基础 第十一篇 面向对象进阶 第十二篇 面向对象高阶 第十三篇 网络编程 第十四篇 并发编程 第十五篇 MySQL数据库 Python入门(目录全览) 第一篇 markdown编辑器 001markdow