您好,欢迎来到沓楚财经网。
搜索
您的当前位置:首页Python学习多进程介绍

Python学习多进程介绍

来源:沓楚财经网


多进程的基本使用

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()

Copyright © 2019- tachun.com.cn 版权所有

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务