多进程multiprocessing

multiprocessing是一个使用类似于线程模块的API来支持产卵过程的软件包。 多处理包提供本地和远程并发,通过使用子进程而不是线程有效地侧移全局解释器锁。 由于这个原因,多处理模块允许程序员充分利用给定机器上的多个处理器。 它可以在Unix和Windows上运行。

from multiprocessing import Process
import time
import os

def info(title):
    print(title)
    print('module name:',__name__)
    print('parent process:',os.getppid())
    print('process id:',os.getpid())


if __name__ == '__main__':

    for i in range(1):
        p = Process(target=info,args=(i,))
        p.start()

    time.sleep(1000)

进程间通讯

from multiprocessing import Queue,Process

def que(data):
    data.put(['hello',None,True])

if __name__ == '__main__':
    q = Queue()
    p = Process(target=que,args=(q,))
    p.start()
    print(q.get())
from multiprocessing import Process, Pipe

def f(conn):
    conn.send(['我是子进程,正在向你发短信'])
    conn.close()

if __name__ == '__main__':
    parent_conn, child_conn = Pipe()
    p = Process(target=f,args=(child_conn,))
    p.start()
    print(parent_conn.recv())
    p.join()

进程间数据共享

Manager()返回的管理器对象控制一个服务器进程,该进程持有Python对象,并允许其他进程使用代理来操纵它们。
Manager()返回的管理器将支持类型列表,字典,命名空间,Lock,RLock,信号量,BoundedSemaphore,Condition,Event,Barrier,Queue,Value和Array。

from multiprocessing import Process, Manager
import os

def f(d,l):
    d[os.getpid()] = os.getpid()
    l.append(os.getpid())
    print(l)


if __name__ == '__main__':
    with Manager() as manager:
        d = manager.dict()
        l = manager.list()

        p_list = []

        for i in range(10):
            p = Process(target=f, args=(d, l))
            p.start()
            p_list.append(p)

        for res in p_list:
            res.join()


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

推荐阅读更多精彩内容