仔细说来,multiprocess不是一个模块而是python中一个操作、管理进程的包。 之所以叫multi是取自multiple的多功能的意思,在这个包中几乎包含了和进程有关的所有子模块。由于提供的子模块非常多,为了方便大家归类记忆,我将这部分大致分为四个部分:创建进程部分,进程同步部分,进程池部分,进程之间数据共享。重点强调:进程没有任何共享状态,进程修改的数据,改动仅限于该进程内,但是通过一些特殊的方法,可以实现进程之间数据的共享。
有了之前多线程使用以及线程间queue的基础,多进程以及进程间通信就很好理解了,下面是多进程基本语法以及进程间通信简单示例
代码语言:javascript复制#多进程基本语法
import multiprocessing, time, os
def process_test():
time.sleep(3)
print("my multiprocessing test")
print("my pprocess id is",os.getppid())
print("my process id is",os.getpid())
if __name__ == '__main__': #多线程必须写在if __name__后面,为什么???
process = multiprocessing.Process(target=process_test) #启动子进程
process.start()
#多进程间数据通信,多进程的queue实际上是python将一个queue序列化后再反序列化给其它进程
#定义一个函数,第一个形参传递一个进程queue
def m_queue_test(Queue, name):
Queue.put(("multiprocess queue test",name)) #put一次只能传递一个数据对象,多个对象必须使用列表 元组 字典等传递
if __name__ == '__main__':
q = multiprocessing.Queue() #主进程实例化一个进程queue
process2 = multiprocessing.Process(target=m_queue_test, args=(q, "zsq")) #将q传递给子进程,由子进程往里面传递数据
process2.start()
print(q.get())#主进程从queue里面读数据
以上就是本文的全部内容,希望对大家的学习有所帮助。