Python_多进程

1. 一个多进程

# 引入多进程模块
import multiprocessing
# 引入时间模块
import time

# 放在子进程中执行的程序
def func(msg):
    for i in range(3):
        print(msg)
        time.sleep(1)

if __name__ == "__main__":
# 创建一个子进程 要传递的参数放在args中
    p = multiprocessing.Process(target=func, args=("hello", ))
    # 启动子进程
    p.start()
    # 主进程阻塞,等待子进程结束
    p.join()
    
    print("done")

2. 进程池

from multiprocessing import Pool

def func(msg):
    print(msg,'*** in func')
    time.sleep(3)

if __name__ == "__main__":
    # 创建进程池设置为5个进程
    pool = Pool(processes=5)
    for i in xrange(3):
        print i
        # 异步执行(相当于同时执行5个(并行),当然实例只添加了三个)
        pool.apply_async(func, ("hello %d" %(i), ))
        # 同步执行(一个一个的执行(串行))
        #pool.apply(func, ("hello %d" %(i), ))
    pool.close()
    #pool.terminate() #结束工作进程,不在处理未完成的任务
    pool.join() #主进程阻塞,等待子进程的退出, join方法要在close或terminate之后使用
    print("done")

3. 获取执行结果

from multiprocessing import Pool
import time

def func(msg):
    print("msg : ", msg)
    time.sleep(3)
    print "end"
    return "multi_result : " + msg

if __name__ == "__main__":
    pool = Pool(processes=4)
    # 定义result列表存储执行结果
    result = []
    for i in xrange(3):
        msg = "hello %d" %(i)
        multi_result = pool.apply_async(func, (msg, ))
        result.append(multi_result)
    pool.close()
    pool.join()
    for res in result:
    # 打印进程执行结果
        print(res.get())
    print("done")

4. 进程间内存共享

a.Array数组

#方法一,Array
from multiprocessing import Process,Array
temp = Array('i', [11,22,33,44])

def Foo(i):
    temp[i] = 100+i
    for item in temp:
        print(i,'----->',item)

for i in range(2):
    p = Process(target=Foo,args=(i,))
    p.start()  
'''
0 -----> 100
0 -----> 22
0 -----> 33
0 -----> 44
1 -----> 100
1 -----> 101
1 -----> 33
1 -----> 44
'''

b.Manager类

#方法二:manage.dict()共享数据
from multiprocessing import Process,Manager

manage = Manager()

dic = manage.dict()

def Foo(i):
    dic[i] = 100+i
    print(dic.values())

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

'''
[100]
[100, 101]
'''
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 进程是正在执行中的应用程序,一个进程包含了该应用程序的所有信息。计算机中多线程的操作已经可以实现多人物的处理机制了...
    阿猫阿狗py阅读 1,636评论 0 0
  • 1.进程和线程 1.1系统多任务机制 多任务操作机制的引入主要是在相同的硬件资源下怎么提高任务处理效率的!多任务的...
    _宁采臣阅读 1,001评论 0 6
  • 作者:邵正将PytLab,Python 中文社区专栏作者。主要从事科学计算与高性能计算领域的应用,主要语言为Pyt...
    Python中文社区阅读 4,848评论 1 31
  • 前言 并行计算是使用并行计算机来减少单个计算问题所需要的时间,我们可以通过利用编程语言显式的说明计算中的不同部分如...
    派派森森阅读 1,366评论 0 0
  • 我梦到躺在马路上滑行 我梦到有鱼群遨游的天空 我梦到自己睡在了水里 我梦见了一场朴实的爱情 起风了 金色的贝终会吐...
    byron子墨阅读 256评论 0 4