多进程multiprocessing

1、多进程Process

调用方法:

from multiprocessing import  Process,freeze_support
import time
def f(i):
    time.sleep(1)
    print(i)

# 这里如果不写if __name__ == "__main__":的话会报freeze_support()错误
if __name__ == "__main__":
    for i in range(10):
        p = Process(target=f,args=(i,))
        p.start()
    print("end")

2、队列Queue

Queue为先进先出,get()一次,Queue里的那个被get的值会被拿走,当队列为空时get()方法会阻塞,

调用方法:

from multiprocessing import Process,Queue
import time

def f(i,q):
    time.sleep(1)
    q.put(i)

if __name__ == "__main__":
    q = Queue()
    for i in range(2):
        p = Process(target=f,args=(i,q,))
        p.start()

    for i in range(2):
        print(q.get())

3、Pipe

示例:
from multiprocessing import Process,Queue,Pipe
import time

def f(i,conn):
    conn.send(i*10)

if __name__ == "__main__":
    parent, child = Pipe()
    for i in range(2):
        p = Process(target=f,args=(i,child))
        p.start()
    for i in range(2):
        print(parent.recv())

4、Manager,进程间数据共享

如果有子进程在使用Manage()对象时,在父进程不能使用这个对象,所以要等所有子进程结束即需使用p.join()后方可在父进程使用Manage()的对象。

如果这里注释join()会报:FileNotFoundError: [WinError 2] 系统找不到指定的文件。

from multiprocessing import Process,Manager
import time

def f(d,l,i):
    time.sleep(5-i)   # 最后起的进程睡眠最少时间,所以父进程不能简单的使用p.join(),而是要把p加入p_list中,然后循环p_list,并使用join()方法
    d[i] = i*10
    l.append(i*100)

if __name__ == "__main__":
    with Manager() as m:
        d = m.dict()
        l = m.list([1,2,3])
        p_list = []
        for i in range(5):
            p = Process(target=f,args=(d,l,i,))
            p.start()
            p_list.append(p)

        for p in p_list:
            p.join()

        print("d:",d)
        print("l:",l)

5、进程池Pool

Pool满时后面的进程会被挂起,当pool中一个进程结束时,挂起的进程会马上开始执行。

from multiprocessing import Process,Pool
import time

def f(i):
    print("begin:",i,time.time())
    time.sleep(i)
    print("end:",i,time.time())

if __name__ == "__main__":
    pool = Pool(5)
    for i in range(1,10):
        pool.apply_async(func=f,args=(i,))
    pool.close()
    pool.join()

执行结果:
begin: 1 1466257881.265401
begin: 2 1466257881.2779033
begin: 3 1466257881.2944064
begin: 4 1466257881.2968454
begin: 5 1466257881.3089068
end: 1 1466257882.265722
begin: 6 1466257882.265722
end: 2 1466257883.2781172
begin: 7 1466257883.2781172
end: 3 1466257884.294556
begin: 8 1466257884.295386
end: 4 1466257885.2975235
begin: 9 1466257885.2975235
end: 5 1466257886.3092482
end: 6 1466257888.2660825
end: 7 1466257890.2784016
end: 8 1466257892.295543
end: 9 1466257894.2983513

  

时间: 2024-10-25 00:53:39

多进程multiprocessing的相关文章

13、多进程multiprocessing、进程池

内容相关: multiprocessing: 进程的创建与运行 进程常用相关函数 进程池: 为什么要有进程池 进程池的创建与运行:串行.并行 回调函数 多进程multiprocessing: python中的多进程需要使用multiprocessing模块 多进程的创建与运行: 1.进程的创建:进程对象=multiprocessing.Process(target=函数名,args=(参数,))[补充,由于args是一个元组,单个参数时要加","] 2.进程的运行:  进程对象.sta

多进程 multiprocessing

1- 什么是 Multiprocessing 和 threading 的比较 多进程 Multiprocessing 和多线程 threading 类似, 他们都是在 python 中用来并行运算的. 不过既然有了 threading, 为什么 Python 还要出一个 multiprocessing 呢? 原因很简单, 就是用来弥补 threading 的一些劣势, 比如在 threading 教程中提到的GIL. 使用 multiprocessing 也非常简单, 如果对 threading

python ---多进程 Multiprocessing

和 threading 的比较 多进程 Multiprocessing 和多线程 threading 类似, 他们都是在 python 中用来并行运算的. 不过既然有了 threading, 为什么 Python 还要出一个 multiprocessing 呢? 原因很简单, 就是用来弥补 threading 的一些劣势, 比如在 threading 教程中提到的GIL. 创建多进程 import multiprocessing as mp import threading as td def

Python多进程multiprocessing(二)

紧接上文 在上文Python多进程multiprocessing(一)中我们介绍了多进程multiprocessing的部分基础操作,在本文中,我们将继续介绍关于多进程的一些知识,比如进程池Pool这个有用的东东.马上开始吧! 使用实例 实例1 import multiprocessing as mp def job(x): return x*x def multicore(): pool = mp.Pool(processes=2) res = pool.map(job,range(10))

python 3 编程之多进程 multiprocessing模块

一 .multiprocessing模块介绍 python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源(os.cpu_count()查看),在python中大部分情况需要使用多进程.Python提供了multiprocessing. multiprocessing模块用来开启子进程,并在子进程中执行我们定制的任务(比如函数),该模块与多线程模块threading的编程接口类似. multiprocessing模块的功能众多:支持子进程.通信和共享数据.执行不同形式的同步,提供了

python(32):多进程 multiprocessing

python 多线程:多线程 由于Python设计的限制(我说的是咱们常用的CPython).最多只能用满1个CPU核心. Python提供了非常好用的多进程包multiprocessing,你只需要定义一个函数,Python会替你完成其他所有事情.借助这个包,可以轻松完成从单进程到并发执行的转换. 1.新建单一进程 如果我们新建少量进程,可以如下: import multiprocessing import time def func(msg): for i in xrange(3): pri

python多进程-----multiprocessing包

multiprocessing并非是python的一个模块,而是python中多进程管理的一个包,在学习的时候可以与threading这个模块作类比,正如我们在上一篇转载的文章中所提,python的多线程并不能做到真正的并行处理,只能完成相对的并发处理,那么我们需要的就是python的多进程来完成并行处理,把所有的cpu资源都利用起来.multiprocessing的很大一部分与threading使用同一套API,只不过换到了多进程的环境.这里面要注意,对于多进程来说,win32平台和unix平

Python多进程multiprocessing使用示例

mutilprocess简介 像线程一样管理进程,这个是mutilprocess的核心,他与threading很是相像,对多核CPU的利用率会比threading好的多. import multiprocessing def worker(num): """thread worker function""" print 'Worker:', num return if __name__ == '__main__': jobs = [] for i

多进程multiprocessing模块

multiprocessing是python的多进程管理包,和threading.Thread类似.直接从侧面用subprocesses替换线程使用GIL的方式,由于这一点,multiprocessing模块可以让程序员在给定的机器上充分的利用CPU. 在multiprocessing中,通过创建Process对象生成进程,然后调用它的start()方法 1 from multiprocessing import Process 2 3 def f(name): 4 print('hello',