python系列——多进程之multiprocessing多进程管理包
发布日期:2021-09-30 09:33:41 浏览次数:5 分类:技术文章

本文共 1842 字,大约阅读时间需要 6 分钟。

1、简介

multiprocessing是python的多进程管理包,和threading.Thread类似。

2、如何简单使用

from multiprocessing import Processdef func(name):    print('hello', name)if __name__ == "__main__":    p = Process(target=func,args=('zhangyanlin',))    p.start()    p.join()  # 等待进程执行完毕

3、多进程共享数据情况下的使用方法

  • Array,Value:存储在一个共享内存地图里,具体示例:
from multiprocessing import Array,Value,Processdef func(a,b):    a.value = 3.333333333333333    for i in range(len(b)):        b[i] = -b[i]if __name__ == "__main__":    num = Value('d',0.0)    arr = Array('i',range(11))    c = Process(target=func,args=(num,arr))    d= Process(target=func,args=(num,arr))    c.start()    d.start()    c.join()    d.join()    print(num.value)    for i in arr:        print(i)输出:3.333333333333333012345678910

说明:

创建num和arr时,“d”和“i”参数由Array模块使用的typecodes创建:“d”表示一个双精度的浮点数,“i”表示一个有符号的整数,这些共享对象将被线程安全的处理。

Array(‘i’, range(10))中的‘i’参数:

‘c’: ctypes.c_char     ‘u’: ctypes.c_wchar    ‘b’: ctypes.c_byte     ‘B’: ctypes.c_ubyte‘h’: ctypes.c_short     ‘H’: ctypes.c_ushort    ‘i’: ctypes.c_int      ‘I’: ctypes.c_uint‘l’: ctypes.c_long,    ‘L’: ctypes.c_ulong    ‘f’: ctypes.c_float    ‘d’: ctypes.c_double
  • Manager:由Manager()返回的manager提供list, dict, Namespace, Lock, RLock, Semaphore, BoundedSemaphore, Condition, Event, Barrier, Queue, Value and Array类型的支持,具体示例:
from multiprocessing import Process,Managerdef f(d,l):    d["name"] = "zhangyanlin"    d["age"] = 18    d["Job"] = "pythoner"    l.reverse()if __name__ == "__main__":    with Manager() as man:        d = man.dict()        l = man.list(range(10))        p = Process(target=f,args=(d,l))        p.start()        p.join()        print(d)        print(l)输出:{'name': 'zhangyanlin', 'age': 18, 'Job': 'pythoner'}[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

说明:

Server process manager比 shared memory 更灵活,因为它可以支持任意的对象类型。另外,一个单独的manager可以通过进程在网络上不同的计算机之间共享,不过他比shared memory要慢。

 

转载地址:https://blog.csdn.net/h_jlwg6688/article/details/108512581 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:python系列——多进程之进程池(pool)
下一篇:python系列——多线程之queue及线程池

发表评论

最新留言

感谢大佬
[***.8.128.20]2024年03月23日 15时16分34秒