僵尸进程与孤儿进程

...........

守护进程

from Multiprocessing  import Process

在 suboprocess.start( ) 的上一行,增加 subprocess.deamon( ),创建守护进程。当主进程执行完成时,subprocess也会被强制结束。

进程之间是相互独立的,主子两个进程在执行时,数据是隔离的。

进程、线程互斥锁

from Multiprocessing import Lock

from threading import Lock

lock = Lock( )

lock.acquire( )  #加锁

lock.release( )  #释放锁

进程互斥锁是为了保证数据的读写安全。避免并发造成数据的错乱。

队列

队列可以使得进程之间的数据可以交互。

队列遵循先进先出(FIFO)的原则.

python中可以使用队列的三种方法

from multiprocessing import Queue
from multiprocessing import JoinableQueue # 基于Queue封装的
import queue # 内置的队列 q_obj = Queue(count) # 对应 import Queue,规定队列中能存放几个值,count为数量
q_obj = JoinableQueue(count) # 对应 import JoinableQueue
q_obj = queue.Queue(count) # 对应 import queue,以上三种方式,三选一。 q_obj.put_nowait(args) # 给队列中增加值,如果队列中满了,就会报错
q_obj.put(args) # 给队列中增加值, 如果队列满了,就会阻塞等待 q_obj.get_nowait() # 从队列中取值,如果取不到值,就会报错。
q_obj.get() # 从队列中取值,如果取不到,就会阻塞等待

  

IPC机制    Interprocess conmunication 进程间通信,在产生子进程时,将队列作为参数传入

生产者和消费者模型    基于队列,在producer 和consumer之间交互信息。

线程

进程是资源单位,开启一个进程,会自动开启一个主线程。

线程是执行单位,开启一个进程会。

IO密集型的程序,做成多线程,计算密集型的程序,做成多进程。

守护线程

主线程要盯着非守护线程结束,主线程才结束,线程上加了 deamon的就是守护线程

守护线程盯着主线程,主线程结束,守护线程立即陪葬。

线程池和进程池

from  concurrent.futures import  ThreadPoolExecutor(多线程)      ProcessPoolExecutor(多进程)

pool = ThreadPoolExecutor(数量)、ProcessPoolExecutor(数量)

pool.submit( 函数方法名,参数  )

pool.shutdown( wait = True )   暂停往池子里加东西

异步调用与回调机制

同步调用

取值用    .result()

# _*_ coding: gbk _*_
# @Author: Wonder from concurrent.futures import ThreadPoolExecutor
from threading import current_thread
import os def task1(num):
print('%s start calculation PID: %s' % (current_thread().getName(), os.getpid()))
res = num ** 2
return res def task2(a):
print(a) if __name__ == '__main__':
pool = ThreadPoolExecutor(5)
for i in range(50):
res = pool.submit(task1, i).result() # pool.submit(task1, i)对象的返回值,使用result()
print(res)
pool.shutdown(wait=True)

  

异步调用

# _*_ coding: gbk _*_
# @Author: Wonder from concurrent.futures import ThreadPoolExecutor
from threading import current_thread
import os def task1(num):
print('线程:%s开始计算,其进程PID: %s' % (current_thread().getName(), os.getpid()))
res = num ** 2
return res def task2(a):
print(a) # <Future at 0x2587d4e28c8 state=finished returned int> 是一个对象
a = a.result() # 对象取值,用result()
print('平方结果为:%s' % a) if __name__ == '__main__':
pool = ThreadPoolExecutor(5)
for i in range(50):
pool.submit(task1, i).add_done_callback(task2) # add_done_callback()回调函数,执行task2
pool.shutdown(wait=True)

a.result( ) # 对象取值 

pool.submit(task1, i).add_done_callback(task2) --------->回调函数,执行完task1 后,自动去执行task2

CSIC_716_20191207【并发编程---进程与线程】的更多相关文章

  1. Java并发编程:进程和线程的由来(转)

    Java多线程基础:进程和线程之由来 在前面,已经介绍了Java的基础知识,现在我们来讨论一点稍微难一点的问题:Java并发编程.当然,Java并发编程涉及到很多方面的内容,不是一朝一夕就能够融会贯通 ...

  2. (并发编程)进程池线程池--提交任务2种方式+(异步回调)、协程--yield关键字 greenlet ,gevent模块

    一:进程池与线程池(同步,异步+回调函数)先造个池子,然后放任务为什么要用“池”:池子使用来限制并发的任务数目,限制我们的计算机在一个自己可承受的范围内去并发地执行任务池子内什么时候装进程:并发的任务 ...

  3. Python之路【第十六篇】:Python并发编程|进程、线程

    一.进程和线程 进程 假如有两个程序A和B,程序A在执行到一半的过程中,需要读取大量的数据输入(I/O操作), 而此时CPU只能静静地等待任务A读取完数据才能继续执行,这样就白白浪费了CPU资源. 是 ...

  4. python并发编程-进程池线程池-协程-I/O模型-04

    目录 进程池线程池的使用***** 进程池/线程池的创建和提交回调 验证复用池子里的线程或进程 异步回调机制 通过闭包给回调函数添加额外参数(扩展) 协程*** 概念回顾(协程这里再理一下) 如何实现 ...

  5. Python 第八篇:异常处理、Socket语法、SocketServer实现多并发、进程和线程、线程锁、GIL、Event、信号量、进程间通讯

    本节内容: 异常处理.Socket语法.SocketServer实现多并发.进程和线程.线程锁.GIL.Event.信号量.进程间通讯.生产者消费者模型.队列Queue.multiprocess实例 ...

  6. Java并发编程系列-(2) 线程的并发工具类

    2.线程的并发工具类 2.1 Fork-Join JDK 7中引入了fork-join框架,专门来解决计算密集型的任务.可以将一个大任务,拆分成若干个小任务,如下图所示: Fork-Join框架利用了 ...

  7. python系列之 - 并发编程(进程池,线程池,协程)

    需要注意一下不能无限的开进程,不能无限的开线程最常用的就是开进程池,开线程池.其中回调函数非常重要回调函数其实可以作为一种编程思想,谁好了谁就去掉 只要你用并发,就会有锁的问题,但是你不能一直去自己加 ...

  8. Python并发编程-进程 线程 同步锁 线程死锁和递归锁

    进程是最小的资源单位,线程是最小的执行单位 一.进程 进程:就是一个程序在一个数据集上的一次动态执行过程. 进程由三部分组成: 1.程序:我们编写的程序用来描述进程要完成哪些功能以及如何完成 2.数据 ...

  9. python 并发编程 进程池与线程池

    一 进程池与线程池 1.为什么需要进程池和线程池 基于多进程或多线程实现并发的套接字通信,然而这种实现方式的致命缺陷是: 服务端的程序运行在一台机器身上,一台机器性能是有极限的,不能无限开线程 服务的 ...

随机推荐

  1. Linux 任务管理器(二)

    特殊文件与进程 fuser命令 [root@localhost home]# fuser -muv . 用户 进程号 权限 命令 /home: root kernel mount (root)/hom ...

  2. 【JS学习】慕课网2-7 练习题:制作新按钮,“新窗口打开网站” ,点击打开新窗口。

    要求: 1.新窗口打开时弹出确认框,是否打开 提示: 使用 if 判断确认框是否点击了确定,如点击弹出输入对话框,否则没有任何操作. 2.通过输入对话框,确定打开的网址,默认为 http://www. ...

  3. 转帖:maven(二) maven项目构建ssh工程(父工程与子模块的拆分与聚合)

    出处:http://www.cnblogs.com/whgk/p/7121336.html 前一节我们明白了maven是个什么玩意,这一节就来讲讲他的一个重要的应用场景,也就是通过maven将一个ss ...

  4. 4、Python 基础类型 -- Tuple 元祖类型

    Python 元组 Python的元组与列表类似,不同之处在于元组的元素不能修改. 元组使用小括号,列表使用方括号. 元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可. 如下实例: 实例(P ...

  5. 71 Serializable(序列化和反序列化)

    对象的输出流:ObjectOutputStream  把对象输出到文件存储起来,我们称作为序列化对象的输入流:ObjectInputStream   把对象从文件中读取出来,我们称作为反序列化 Obj ...

  6. javascript null vs undefined

    这个是很古老的问题了. 一直存在争议,有些人认为,很多语言没用 undefined 也活的好好,为啥要 undefined 呢. 那有了 undefined 是否还需要 null 呢 ? typesc ...

  7. python自动化测试-使用第三方python库技术实现

    转载自https://www.cnblogs.com/beer/p/5418471.html

  8. 用记事本和Eclipse编写Java程序

    JRE(Java Runtime Environment    Java运行环境) 包括Java虚拟机(JVM Java Virtual Machine)和Java程序所需的核心类库等,如果想要运行一 ...

  9. 数字IT基础-数据采集总线

    摘要: 日志服务是阿里自产自用的产品,在双十一.双十二和新春红包期间承载阿里云/蚂蚁全站.阿里电商板块.云上几千商家数据链路,每日处理来自百万节点几十PB数据,峰值流量达到每秒百GB, 具备稳定.可靠 ...

  10. thinkphp 常量参考

    预定义常量 预定义常量是指系统内置定义好的常量,不会随着环境的变化而变化,包括: URL_COMMON 普通模式 URL (0) URL_PATHINFO PATHINFO URL (1) URL_R ...