1 usePool.py #coding: utf-8 """ 学习进程池使用 multiprocessing.Pool 总结: 1. Pool 池用于处理 多进程,并不是多线程 2. 池有大小的概念 3. 并不是所有的子进程添加完了,才开始启动子进程. 当第一个进程添加到池中的时候,马上就启动了 使用: 1. 创建进程池对象 pool = multiprocessing.Pool(processes = 3) 2. 往池中添加进程 主要:pool.apply_async(f…
# -*- coding: utf-8 -*- """ 多进程同步 使用信号量 multiprocessing.Semaphore 逻辑: 启动5个进程,打印,每个各自睡眠2秒 竞争2个锁大小的信号量,任何时候只有2个进程在执行打印 总结: 1.通过信号 实现了Pool的效果,任何时候最多只有2个进程在执行指定代码段 2.相当于创建了锁的数组,一次创建多把锁,绑定同一个名字 3.与RLock 有细微区别 RLock 同一个进程可以锁多次 Semaphore 多个不同进程可以同…
本章将从Python案例讲起:所使用bs4做一个简单的爬虫案例,更多内容请参考:Python学习指南 案例:使用BeautifulSoup的爬虫 我们已腾讯社招页面来做演示:http://hr.tencent.com/position.php?&start=10#a 使用BeautifulSoup4解析器,将招聘网页上的职位名称.职位类别.招聘人数.工作地点.时间.以及每个职位详情的点击链接存储出来. #-*- coding:utf-8 -*- from bs4 import Beautiful…
# -*- coding: utf-8 -*- """ 多进程 同步 事件multiprocessing.Event 逻辑: 子线程负责打印,会阻塞, 等待主进程发出控制信号 以便继续 总结: 个人理解, multiprocessing.Event 中维护了一个boolean变量,初始值为Fasle e.wait() 如果为Fasle会阻塞,True继续执行 , set() 将值设置为True clear() 将值设置为False is_set() 查看 不确定是否支持多个子…
# -*- coding: utf-8 -*- """ 多进程 锁使用 逻辑: 10个进程各种睡眠2秒,然后打印. 不加锁同时打印出来,总共2秒,加锁一个接一个打印,总共20秒 总结: 1.Lock 只要1把锁,RLock 有多把锁,但是不清楚什么场景只适合用RLock 使用: 1. 创建所 lock = Lock() or lock = RLock() 2. 把锁当做参数传入给子进程 3. 在子进程执行代码中对代码块,加锁 lock.acquire(); 其他代码 lock…
# -*- coding: utf-8 -*- """ 多进程数据共享 管道Pipe 逻辑: 2个进程,各自发送数据到管道,对方从管道中取到数据 总结: 1.只适合两个进程 2.recv 会阻塞 3.其中一个进程结束了,管道还在,另外一个进程还能使用 4.可以把管道认为一个队列, 发送数据端,往队列写数据 接收数据端,从队列读数据,队列空了阻塞 单向管道 1个队列,双向管道 2个队列 使用: 1. 创建2个管道的两端的对象 pipe_left_conn,pipe_right_…
# -*- coding: utf-8 -*- """ 多进程数据共享 服务器进程 multiprocessing.Manager 入门使用 逻辑: 20个子线程修改共享数据 总结: 1. Mangeer类似 Value,Array 2. 里面内容比较多,这只是入门用法 3. 还可以操作共享自定义对象,本例是基本数据结构 简单使用: 1. 创建多进程管理的 基本数据结构 list1 = manager.list([1,2,3,4,5]) dict1 = manager.dic…
代码: # -*- coding: utf-8 -*- """ 学习线程同步,使用条件变量 逻辑: 生产消费者模型 一个有3个大小的产品库,一个生产者负责生产,一个消费者负责消费 每次生产或消费一个产品,产品库满了,生产者必须等待,产品库空了,消费者必须等待 生产者的速度是消费者的速度2倍,先启动消费者,一段时间后启动生产者 总结: 1. 条件变量底层用到R锁,对于已经获得锁的线程可以执行多次 acquire(),锁多次 2. 不确定是否和java的这一套 ,原理一样 使用:…
# -*- coding: UTF-8 -*- """ 学习队列 Queue 总结: 1. 队列可以设置大小,也可以无限大小 2. 空了,满了,读写时可以阻塞,也可以报错 3. 队列中可以存储不同的数据类型对象 4. 队列的实现大量用到 线程模块 threading ,说明适用多线程之间的数据共享操作 不确定是否适合多进程之间的数据共享操作 5. 队列的实现用到锁操作,acquire,release,wait,notify 不需要在个人代码中使用 使用: 1. 创建队列对象…
try-except语句 try: 被检测代码 except Exception [as reason]: 出现异常后的处理代码 例: try: sum = 1+' f=open('未定义文件.txt') print(f.read()) f.close except OSError as reason: print('文件出错啦!错误原因:' + str(reason)) except TypeError as reason: print('类型错误' + str(reason)) 运行结果:类…