• 技术文章 >后端开发 >Python教程

    Python学习多进程介绍

    高洛峰高洛峰2017-03-22 10:19:06原创540
    多进程的基本使用

    import multiprocessing
    import os
    import time
     
     
    def run():
        print("父进程:%s,子进程:%s" % (os.getppid(), os.getpid()))
        time.sleep(2)
     
    if __name__ == "__main__":
            p = multiprocessing.Process(target=run)
            p.start()
            p.join()

    进程间通信

    不同进程间内存是不共享的,要实现两个进程间的数据交换,可以用以下方法

    Queue

    import multiprocessing
     
     
    def f(q):
        q.put(11111)
     
    if __name__ == "__main__":
        q = multiprocessing.Queue()
        p = multiprocessing.Process(target=f, args=(q,))
        p.start()
        print(q.get())

    Pipe

    import multiprocessing
     
     
    def f(conn):
        conn.send(1)
        conn.send(2)
        print(conn.recv())
        conn.close()
     
    if __name__ == "__main__":
        parent_conn, child_conn = multiprocessing.Pipe()
        p = multiprocessing.Process(target=f, args=(child_conn,))
        p.start()
        print(parent_conn.recv())
        print(parent_conn.recv())
        parent_conn.send(3)
        p.join()

    进程间的数据共享

    Manager

    import multiprocessing
    import os
     
     
    def func(d, l):
        d[os.getpid()] = os.getpid()
        print(d)
        l.append(os.getpid())
        print(l)
     
    if __name__ == "__main__":
        manager = multiprocessing.Manager()
        d = manager.dict()
        l = manager.list()
        p_list = []
        for i in range(5):
            p = multiprocessing.Process(target=func, args=(d, l))
            p.start()
            p_list.append(p)
        for p in p_list:
            p.join()

    进程锁

    当多个进程要访问共享资源时,Lock可以避免访问冲突

    import multiprocessing
     
     
    def f(l, i):
        l.acquire()
        print("hello world", i)
        l.release()
     
    if __name__ == "__main__":
        lock = multiprocessing.Lock()
        for num in range(10):
            p = multiprocessing.Process(target=f, args=(lock, num))
            p.start()

    进程池

    进程池内部维护一个进程队列,当使用时,则去进程池中获取一个进程,如果进程池中没有可使用的进程,那么程序就会等待,直到进程池中有进程

    import multiprocessing
    import os
    import time
     
     
    def foo(i):
        time.sleep(2)
        print("in process", os.getpid())
        return i + 100
     
     
    def bar(arg):
        print("==>exec done:", arg)
     
    if __name__ == "__main__":
        pool = multiprocessing.Pool(5)
        for i in range(10):
            pool.apply_async(func=foo, args=(i,), callback=bar)
        print("end")
        pool.close()
        pool.join()

    以上就是 Python学习多进程介绍的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐: Python 多进程
    上一篇:使用python正则表达式编写一个计算器方法 下一篇:使用python生成指定位数的密码的方法介绍
    VIP课程(WEB全栈开发)

    相关文章推荐

    • 【活动】充值PHP中文网VIP即送云服务器• python中API调用的详解与示例• 手把手教你在Python使用plot()函数画图• 详细解析python正则表达式re模块• 一文搞定Python中pip的安装与使用• 一文详解python生成器
    1/1

    PHP中文网