Python学习多进程介绍

高洛峰
发布: 2017-03-22 10:19:06
原创
1197人浏览过

多进程的基本使用

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

立即学习Python免费学习笔记(深入)”;

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

豆包爱学
豆包爱学

豆包旗下AI学习应用

豆包爱学 674
查看详情 豆包爱学
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中文网其它相关文章!

python速学教程(入门到精通)
python速学教程(入门到精通)

python怎么学习?python怎么入门?python在哪学?python怎么学才快?不用担心,这里为大家提供了python速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号