多进程

作者: Freedom_pxc | 来源:发表于2018-04-12 01:38 被阅读0次
多进程简单理解:

进程之间是独立的,是操作系统自己来维护和管理的,python通过C接口起了一个进程,多进程可以充分的利用多核CPU

  • 多进程的创建:
"""
multiprocessing模块式python为开发多进程提供跨平台的模块模块式python为开发多进程提供跨平台的模块
"""
from multiprocessing import Process
#参数可有可无
def run(path,name):
    #while True:
    for i in range(100):
        print("唱歌去",path,name)

if __name__ == "__main__":
    print("程序开始运行....")
    #target属性 指向执行的函数(传递),不是调用返回值
    #创建独立的进程对象(可以开辟多个对象)
    task1 = Process(target=run,args=("ktv","唱吧"))
    #启动进程
    task1.start()
    task2 = Process(target=run,args=("去酒吧","sssss"))
    task2.start()
    print("程序运行结束")
多进程间的通信:

进程间独立,如果想相互访问,就必须有一个中间翻译,下面提供了几种进程间通信的方法

  • 进程Queue
#import queue
from multiprocessing import Process,Queue

#子进程,内存独立,相当于数据的传递
def x(subQueue):
    subQueue.put("呵呵")

if __name__ == "__main__":
    #进程Queue
    q = Queue()
    #创建进程
    p = Process(target=f,args=(q,))
    #执行进程
    p.start()
    print(q.get())
"""
Queue通信,相当于父进程赋值了一个Queue给子进程,
子进程在这个Queue放好数据后,序列化一个中间翻译,
然后在反序列化返回给父进程,
因为进程之间内存独立,不能传递对象,传递的其实是序列化的数据
"""
  • Pipe:
    多进程有一种传递方式叫管道,它的原理和Queue相同
from multiprocessing import Process,Pipe

#定义子进程执行
def x(Subconn):
    Subconn.send("成绩出来了吗")
    print("这个是父亲的询问:",Subconn.recv())
    Subconn.close()

if __name__ == "__main__":
#创建管道两端
    parent_conn,child_conn = Pipe()
#创建子进程
    p = Process(target = x.argst =(child_conn,))
    p.start()     #控制流程
    print("l来自儿子的问候:",parent_conn.recv())
    parent_conn.send("出来了,不怎么好")
    p.join()
进程锁:

虽然内存独立,但是即使是打印也会造成打印数据错误,为了防止进程间抢屏幕打印输出,加了进程锁

from multiprocessing import Process,Lock

#定义子进程执行
def x (lock,num)
    lock.acquire()
    print("哈哈,嘻嘻,嘿嘿",num)
    lock.release

if __name__ == "__main__":
    lock = Lock()
#循环创建50个子进程
    for num in range(50):
        Process(target = x, args=(lock,num)).start()
进程池:

当我们需要的进程数量不多的时候,我们可以使用multiprocessing的Process类来创建进程。但是如果我们需要的进程特别多的时候,手动创建工作量太大了,所以Python也为我们提供了Pool(池)的方式来创建大量进程。

from multiprocessing import Pool
import os,time

def run(msg):
    print("开始一个子线程运行了……")
    time.sleep(1)
    print("开始一个子线程运行结束了……")

if __name__ == "__main__":
    pool = Pool(3)  # 表示初始化一个进程池,最大进程数为3
    for x in range(10):
        pool.apply_async(run, args=("hello pool",))
    print("------start----")
    pool.close() # 关闭池
    pool.join() # 等待所有的子进程完成,必须放在close后面
    print("-------end------")

相关文章

  • UNIX基础--进程和守护进程

    进程和守护进程 Processes and Daemons 进程(Processes) FreeBSD 是一个多任...

  • rsync服务企业应用

    守护进程服务企业应用: 守护进程多模块功能配置 守护进程的排除功能实践 守护进程来创建备份目录 守护进程的访问控制...

  • Nginx 的进程结构,你明白吗?

    Nginx 进程结构 这篇文章我们来看下 Nginx 的进程结构,Nginx 其实有两种进程结构: 单进程结构 多...

  • 进程/线程

    进程和线程 多任务的介绍 进程的介绍 多进程完成多任务 获取进程编号 进程的注意点 文件夹高并发copy器 1、多...

  • 多易日记进程

    10.29 解决移动端适配问题:采用手淘写的lib-flexible解决移动端的适配,采用pxToRem解决px转...

  • 使用ipc为 electron 实现一个无用的通信轮子

    入门学习electron时了解到,渲染进程与主进程存在一对多的关系, 渲染进程与主进程需要通过ipc或remote...

  • mysql(三)

    MySQL多实例 什么是实例? 一个进程+多个线程+预分配的内存结构 什么是多实例? 多个进程+多个线程+多个预分...

  • 线程和线程池

    线/进程、多线/多进程、线程并发/并行 一、线程、进程概念 进程:是程序的一次运行活动,由系统资源分配和调度的一个...

  • Python札记52_进程和线程2

    在之前的札记Python札记50_进程和线程1中介绍了进程、线程和子进程以及多进程的相关知识,本札记中重点介绍多线...

  • 5. python多进程锁-实现简易抢票

    一、主题 Lock类与RLock类相同:由于进程之间随机调度:某进程可能执行n条后,CPU接着执行其他进程。为了多...

网友评论

      本文标题:多进程

      本文链接:https://www.haomeiwen.com/subject/kketkftx.html