zoukankan      html  css  js  c++  java
  • 进程 multiprocessing详解

    一 ,核心
    就是像线程一样管理进程 ,类似于threading ,cup利用率较好,该模块用来跨平台的多进程模块,含有一个Process 类代表进程对象,start() 启动进程
    Process语法结构如下:
    Process([group [, target [, name [, args [, kwargs]]]]])
    target:表示这个进程实例所调用对象;
    args:表示调用对象的位置参数元组;
    kwargs:表示调用对象的关键字参数字典;
    name:为当前进程实例的别名;#
    group:大多数情况下用不到;
    Process类常用方法:
    is_alive():判断进程实例是否还在执行;
    join([timeout]):是否等待进程实例执行结束,或等待多少秒;
    start():启动进程实例(创建子进程);
    run():如果没有给定target参数,对这个对象调用start()方法时,就将执行对象中的run()方法;
    terminate():不管任务是否完成,立即终止;
    Process类常用属性:
    name:当前进程实例别名,默认为Process-N,N为从1开始递增的整数;
    pid:当前进程实例的PID值;
    三,进程的创建
    1.直接通过Process 创建进程
    2,通过继承Process,重写init,run方法
     
    3,创建进程池------Pool
    方法
    apply_async(func[, args[, kwds]]) 使用非阻塞方式调用func(并行执行,堵塞方式必须等待上一个进程退出才能执行下一个进程 args为传递给func的参数列表,kwds为传递给func的关键字参数列表;
    apply(func[, args[, kwds]]):使用阻塞方式调用func--等待是上一个任务执行
    close():关闭Pool,使其不再接受新的任务;
    terminate():不管任务是否完成,立即终止;
    join():主进程阻塞,等待子进程的退出, 必须在close或terminate之后使用;主进程创建或添加任务后 默认不会等待进程池中的任务执行完后才结束。而是当主进程的任务做完后,立马结束,如果这个地方没有join 会导致进程池中的任务不会执行
     
    (向进程中添加任务
    注意:如果添加的任务数量超过进程池中进程的数量,不会导致添加不进去,
    添加到进程的任务,如果还没有执行的话,那么系好似他们会等带进程池中的一个进程完成任务后,会自动去用刚刚完成任务的进程我i完成新的任务
     
    ),
     
    同步、异步、阻塞和非阻塞四种调用方式。
    每次循环将空闲下来的子进程去调用目标===非堵塞方式
    设置进程池最大子进程数
    阻塞就是干不完不准回来,   
    非阻塞就是你先干,我现看看有其他事没有,完了告诉我一声
    同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。
    异步过程调用发出后,调用者不能立刻得到结果。实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者
    老张爱喝茶,废话不说,煮开水。出场人物:老张,水壶两把(普通水壶,简称水壶;会响的水壶,简称响水壶)。1 老张把水壶放到火上,立等水开。(同步阻塞)老张觉得自己有点傻2 老张把水壶放到火上,去客厅看电视,时不时去厨房看看水开没有。(同步非阻塞)老张还是觉得自己有点傻,于是变高端了,买了把会响笛的那种水壶。水开之后,能大声发出嘀~~~~的噪音。3 老张把响水壶放到火上,立等水开。(异步阻塞)老张觉得这样傻等意义不大4 老张把响水壶放到火上,去客厅看电视,水壶响之前不再去看它了,响了再去拿壶。(异步非阻塞)老张觉得自己聪明了。
     
    四,进程间通信 队列Queue--是线程安全的
    多个进程配合进程===数据交互----缓存区
    方法
     
    用于实现多个进程之间的数据传递
    创建Queue对象时 没有指定则没有上限值
    Queue.========先进先出
    qsize() 返回当前队列中消息的数量
    empty() 判断是否为空、
    full 判断是否满l
    get 获取队列中的一条消息,然后将其在队列中移除
     
    Queue.get_nowait():相当Queue.get(False);
    Queue.put(item,[block[, timeout]]):将item消息写入队列,block默认值为True堵塞
     
     
    生产者消费者模型queue 作为管道 ====单向队列
    进程池之间的进程通信==
     
     
  • 相关阅读:
    C#简单操作XML文件的增、删、改、查
    一个感觉还算可以的验证码生成程序
    安装aclocal1报错问题
    php中soap 的使用实例无需手写WSDL文件,提供自动生成WSDL文件类
    ofstream和ifstream详细用法[转]
    [原]C++ Soap客户端实例
    PHP中文件读、写、删的操作
    C++ Boost Thread 编程指南
    (转)虚函数和纯虚函数区别
    strcpy和memcpy的区别
  • 原文地址:https://www.cnblogs.com/yumo1627129/p/7985267.html
Copyright © 2011-2022 走看看