上一页 1 ··· 6 7 8 9 10 11 12 13 14 ··· 22 下一页
摘要: 1. 事件 其实就是一种标志,事件默认阻塞状态,阻塞状态下执行e.wait()就会一直陷入阻塞状态(但是e.wait(10)就是设置在阻塞状态下 e.is_set()=False时只阻塞10秒就结束) ; e.set() 设置非阻塞状态,此时e.is_set()=True 并且执行e.wait()不 阅读全文
posted @ 2018-10-15 17:37 写的BUG代码少 阅读(115) 评论(0) 推荐(0) 编辑
摘要: 1. 信号量 信号量本质上还是锁,只不过这个锁有很多把钥匙,同一时间只允许有限个线程进程操作(实现有限个数据的并发),但是线程数开了很多个的(信号量的参数不是开的线程数。只是代表同一时间允许并发的线程数) 运行结果: 信号量与线程池的异同点: 相同:在信号量的acquire之后,同一时间只能有有限个 阅读全文
posted @ 2018-10-15 16:55 写的BUG代码少 阅读(148) 评论(0) 推荐(0) 编辑
摘要: 1. 守护线程 设置子线程为守护线程,则守护线程的代码会等待主线程代码执行完毕而结束: 运行结果: 再来看一个例子: 运行结果: 2. GIL全局解释器锁 只是锁线程,并不能真正保证数据安全 GIL只是在线程上加锁,可以保证同一时间只能有一个线程操作数据,但是并没有直接对数据加锁,所以对某些特殊情况 阅读全文
posted @ 2018-10-15 16:15 写的BUG代码少 阅读(196) 评论(0) 推荐(0) 编辑
摘要: 1. 线程 线程是CPU调度的最小单位,进程是CPU分配资源的最小单位; 每个进程中至少有一个线程;(所以进程是包含线程的,同一进程的不同线程之间数据是共享的); 开启进程的时间要比开启线程的时间长,CPU在进程之间的切换比在线程之间的切换要慢很多; 如果有两个任务需要共享内存,有需要实现异步,就需 阅读全文
posted @ 2018-10-14 18:32 写的BUG代码少 阅读(198) 评论(0) 推荐(0) 编辑
摘要: 1. 回调函数 回调函数的参数 接收自子进程执行函数的返回值,其实回调函数用在开多进程时,IO操作比较多的场合,如果对于有很多IO操作的程序,使用单进程,主进程就会一直等待,等待的时间就会很长,每一个IO都会等待,这样就会很浪费时间,但是如果在子进程中开多个子进程去执行IO操作,然后异步实现,那么主 阅读全文
posted @ 2018-10-14 14:17 写的BUG代码少 阅读(262) 评论(0) 推荐(0) 编辑
摘要: 1. 进程池 进程池,只开指定数目的进程数(一般是CPU内核数+1)这样调度多个任务时,执行效率要比同时开多个进程执行效率要高很多(因为当同时开多个进程时,开进程是很占用资源的,时间都浪费在开进程上面了) 进程池方法 p.map() 运行结果: 我们可以比较一下,调度100个任务执行func函数,使 阅读全文
posted @ 2018-10-13 21:43 写的BUG代码少 阅读(151) 评论(0) 推荐(0) 编辑
摘要: 1. Manager可以提供进程之间共享的数据类型(list dict等) 先撇开进程,单纯看一下使用Manager创建一个dict的例子(只不过使用Manager创建的dict,进程之间都可以使用) 运行结果: 2. 使用Manager创建进程之间共享的dict: 运行结果: (注意这里打印的是开 阅读全文
posted @ 2018-10-13 18:00 写的BUG代码少 阅读(439) 评论(0) 推荐(0) 编辑
摘要: 1. 管道支持双端通信,但是数据不安全,没有加锁 运行结果: 如果一端发送完数据之后直接把管道这端关闭,另一端不断接收数据就会发生EOFError错误(我们可以捕获这种错误,当管道一端关闭时,另一端捕获到该类型的错误,直接也关闭就ok了) 运行结果: 2.使用管道实现主进程和子进程之间的通信 思路: 阅读全文
posted @ 2018-10-13 11:39 写的BUG代码少 阅读(599) 评论(0) 推荐(0) 编辑
摘要: 1. 生产者消费者模型 生产者消费者速度不匹配时,比如生产的快但是消费的慢,就可以给消费者多开几个进程,但是消费者其实是不知道生产者生产了多少数据,什么时候生产结束,消费者这边其实不太好接收,解决办法就是消费者使用while循环接收生产者发来的消息;生产者给消费者发送一个信号,消费者者接受到就立马跳 阅读全文
posted @ 2018-10-12 20:38 写的BUG代码少 阅读(196) 评论(0) 推荐(0) 编辑
摘要: 1. 队列 从multiprocessing模块导入的队列Queue跟其他队列一样也具有put()方法,get()方法,qsize()方法: 创建队列的第一种方式:(无参数 可以往队列中无限制的放值): 运行结果: 创建队列的第二种方式 (有参数,只可以往队列中放入指定长度的元素,超出限制,就会发生 阅读全文
posted @ 2018-10-12 16:23 写的BUG代码少 阅读(241) 评论(0) 推荐(0) 编辑
上一页 1 ··· 6 7 8 9 10 11 12 13 14 ··· 22 下一页