僵尸进程与孤儿进程

...........

守护进程

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

最新文章

  1. 【开源】.Net 分布式服务中心
  2. Xcode 缓存 帮助文档 隐藏文件夹显示方法
  3. 自定义 导航条分割线,tabBar分割线颜色(或者是 去掉)
  4. Ubuntu 12.10使用apt安装Oracle/Sun JDK
  5. Cocos2d-x中的字符串
  6. bzoj 2716 天使玩偶(CDQ分治,BIT)
  7. Binary Tree Zigzag Level Order Traversal——LeetCode
  8. 异步陷阱之IO
  9. GameUnity 2.0 文档(三) 纸片人八方向
  10. 201521123066《Java程序设计》第七周学习总结
  11. Python:黑板课爬虫闯关第三关
  12. webDriver基本运用
  13. javascript基础修炼(1)——一道十面埋伏的原型链面试题
  14. zabbix监控到异常后自动执行对应命令
  15. C++设计模式——观察者模式(转)
  16. The Little Prince-12/07
  17. 百度地图足迹demo(多点轨迹生成)
  18. git 常用命令(不定期更新)
  19. H - Quicksum(1.5.3)
  20. Struts2学习总结——文件上传与下载

热门文章

  1. spring基于注解的事务控制
  2. windows 添加永久路由
  3. 【JS学习】慕课网2-7 练习题:制作新按钮,“新窗口打开网站” ,点击打开新窗口。
  4. mysql-一行分隔成多行数据
  5. 「NOI2016」循环之美 解题报告
  6. Android中的Handler,Looper,Message机制
  7. 二维差分前缀和——cf1202D(好题)
  8. python实现收邮件判断模块poplib,email
  9. [7.22NOIP模拟测试7]方程的解 题解(扩展欧几里得)
  10. 训练集(train set) 验证集(validation set) 测试集(test set)。