最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

Python学习多进程介绍

来源:动视网 责编:小采 时间:2020-11-27 14:25:02
文档

Python学习多进程介绍

Python学习多进程介绍:多进程的基本使用import multiprocessing import os import time def run(): print("父进程:%s,子进程:%s" % (os.getppid(), os.getpid())) time.sleep(2) if __name__ == "__main__&
推荐度:
导读Python学习多进程介绍:多进程的基本使用import multiprocessing import os import time def run(): print("父进程:%s,子进程:%s" % (os.getppid(), os.getpid())) time.sleep(2) if __name__ == "__main__&


多进程的基本使用

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学习多进程介绍

Python学习多进程介绍:多进程的基本使用import multiprocessing import os import time def run(): print("父进程:%s,子进程:%s" % (os.getppid(), os.getpid())) time.sleep(2) if __name__ == "__main__&
推荐度:
标签: 学习 介绍 进程
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top