随笔分类 -  进程线程协程GIL锁等

1 2 下一页
协程
摘要:协程,又称微线程,纤程。英文名Coroutine(本质就是一个线程)。 优点1: 协程极高的执行效率。因为子程序切换不是线程切换,而是由程序自身控制,因此,没有线程切换的开销,和多线程比,线程数量越多,协程的性能优势就越明显。 优点2: 不需要多线程的锁机制,因为只有一个线程,也不存在同时写变量冲突 阅读全文
posted @ 2018-06-12 16:52 Python哥 阅读(187) 评论(0) 推荐(0)
进程池
摘要:进程池内部维护一个进程序列,当使用时,则去进程池中获取一个进程,如果进程池序列中没有可供使用的进进程,那么程序就会等待,直到进程池中有可用进程为止。 进程池中有两个方法: apply 同步 apply_async 异步 阅读全文
posted @ 2018-06-06 17:54 Python哥 阅读(124) 评论(0) 推荐(0)
进程同步
摘要:from multiprocessing import Process, Lock def f(l, i): l.acquire(): print('hello world %s'%i) l.release() if __name__ == '__main__': lock = Lock() for 阅读全文
posted @ 2018-06-06 17:50 Python哥 阅读(124) 评论(0) 推荐(0)
多进程之间数据通讯
摘要:有三种方式: 1 进程对列Queue 2 管道 结果是: [12, {'name': '123'}, 'hello'] 接收主进程消息1 主进程发子进程的消息1 接收主进程消息2 主进程发子进程的消息2 3 Queue和pipe(管道)只是实现了数据交互,并没实现数据共享,即一个进程去更改另一个进程 阅读全文
posted @ 2018-06-06 16:08 Python哥 阅读(262) 评论(0) 推荐(0)
多进程模块 multiprocessing
摘要:由于GIL的存在,python中的多线程其实并不是真正的多线程,如果想要充分地使用多核CPU的资源,在python中大部分情况需要使用多进程。 multiprocessing包是Python中的多进程管理包。与threading.Thread类似,它可以利用multiprocessing.Proce 阅读全文
posted @ 2018-06-06 10:11 Python哥 阅读(187) 评论(0) 推荐(0)
生产者消费者模型
摘要:生产者消费者模型: 为什么要使用生产者和消费者模式 在线程世界里,生产者就是生产数据的线程,消费者就是消费数据的线程。在多线程开发当中,如果生产者处理速度很快,而消费者处理速度很慢,那么生产者就必须等待消费者处理完,才能继续生产数据。同样的道理,如果消费者的处理能力大于生产者,那么消费者就必须等待生 阅读全文
posted @ 2018-06-04 17:46 Python哥 阅读(166) 评论(0) 推荐(0)
多线程利器-队列(queue)
摘要:#队列有3中模式,先进先出,先进后出,优先级 1:先进先出import queue q = queue.Queue() #默认是先进先出q.put(12)q.put('jack')q.put({'name':'ok'})while True: data = q.get() print(data) q 阅读全文
posted @ 2018-06-04 17:21 Python哥 阅读(633) 评论(0) 推荐(0)
信号量
摘要:信号量用来控制线程并发数的,BoundedSemaphore或Semaphore管理一个内置的计数 器,每当调用acquire()时-1,调用release()时+1。 计数器不能小于0,当计数器为 0时,acquire()将阻塞线程至同步锁定状态,直到其他线程调用release()。(类似于停车位 阅读全文
posted @ 2018-06-01 17:10 Python哥 阅读(170) 评论(0) 推荐(0)
同步对象(同步条件Event)
摘要:event = threading.Event() #创建同步对象 event.wait() #同步对象等待状态 event.set() #同步对象设置Trueevent.clear() #清除同步对象 event.wait() >捕捉到 event.set() > 继续执行 >event.clea 阅读全文
posted @ 2018-06-01 16:43 Python哥 阅读(165) 评论(0) 推荐(0)
线程死锁和递归锁
摘要:在线程间共享多个资源的时候,如果两个线程分别占有一部分资源并且同时等待对方的资源,就会造成死锁,因为系统判断这部分资源都正在使用,所有这两个线程在无外力作用下将一直等待下去。 下面是一个死锁的例子: 阅读全文
posted @ 2018-06-01 14:06 Python哥 阅读(219) 评论(0) 推荐(0)
同步锁Lock(互斥锁)
摘要:同步锁作用: 在我当前包含(lock.acquire() 和 lock.release()之间 )的代码没有执行完成,不进行线程切换,必须等我执行完了,下一个线程才能继续执行(为什么要用同步锁,假如我们同时在操作一个数据的时候,比如数字100,10个线程同时操作他减1的时候,每个线程减10次,我们想 阅读全文
posted @ 2018-05-30 20:54 Python哥 阅读(419) 评论(0) 推荐(0)
GIL计算python 2 和 python 3 计算密集型
摘要:首先我画了一张图来表示GIL运行的方式: 结果: # 加法结果 499999500001 # 乘法结果: 结果太长省去了 # 上面2个线程总共运行时间: 27.660937547683716 Python 2中计算如上代码: 结果: # 加法结果 499999500001 # 乘法结果: 结果太长省 阅读全文
posted @ 2018-05-30 17:36 Python哥 阅读(447) 评论(0) 推荐(0)
什么是python的全局解释锁(GIL)
摘要:GIL解决了Python中的什么问题? 为什么选取GIL作为解决方案? 对多线程Python程序的影响 为什么GIL还没有被删除? 为什么在Python 3 中GIL没有被移除? 如何处理Python中的GIL? 我们所说的Python全局解释锁(GIL)简单来说就是一个互斥体(或者说锁),这样的机 阅读全文
posted @ 2018-05-30 16:53 Python哥 阅读(5186) 评论(0) 推荐(2)
IO密集型和计算密集型
摘要:我们常说的多任务或者单任务分为两种: IO密集型的任务 计算密集型的任务 IO密集型的任务或:有阻塞的状态,就是不一直会运行CPU(中间就一个等待状态,就告诉CPU 等待状态,这个就叫IO密集型),例如:sleep 状态等 这个上面代表了IO密集型. 计算密集型的任务: 反过来没有等待状态就是计算密 阅读全文
posted @ 2018-05-30 16:16 Python哥 阅读(5127) 评论(0) 推荐(2)
并发并行与异步的概念
摘要:为了提高CPU的使用效率、支持多任务操作,操作系统中引入了并发技术。 所谓并发是指系统中的多个程序或程序段能够同时执行,这里的同时执行并不是指某一个时刻多段程序在同进执行(除非有多个CPU),而是CPU能把时间分给不同的程序段。比如前面等待I/O的例子,若采用并发技术,当一个程序在等待I/O时,系统 阅读全文
posted @ 2018-05-30 14:50 Python哥 阅读(472) 评论(0) 推荐(0)
threading 多线程类继承方式调用
摘要:import threading #线程import timeclass Work(threading.Thread): def __init__(self,n): threading.Thread.__init__(self) #改写父类init方法 并把self 传递过去 self.n = n 阅读全文
posted @ 2018-05-30 10:35 Python哥 阅读(275) 评论(0) 推荐(0)
setDaemon 守护线程
摘要:setDaemon(True): 将线程声明为守护线程,必须在start() 方法调用之前设置, 如果不设置为守护线程程序会被无限挂起。这个方法基本和join是相反的。 当我们 在程序运行中,执行一个主线程,如果主线程又创建一个子线程,主线程和子线程 就分兵两路,分别运行,那么当主线程完成 想退出时 阅读全文
posted @ 2018-05-29 20:06 Python哥 阅读(739) 评论(0) 推荐(0)
threading join用法
摘要:运行的结果是: Beijing time is start 2018-05-29 17:37:18 Shanghai time is start 2018-05-29 17:37:18 Beijing time is over 2018-05-29 17:37:20 Done Shanghai ti 阅读全文
posted @ 2018-05-29 17:42 Python哥 阅读(962) 评论(0) 推荐(0)
threading 多线程使用
摘要:实例 1import threading #线程import timedef Say(n): print('Test %d' %n) time.sleep(2)if __name__ == '__main__': t1 = threading.Thread(target=Say,args=(10,) 阅读全文
posted @ 2018-05-29 17:24 Python哥 阅读(201) 评论(0) 推荐(0)
线程概念
摘要:什么是线程: 大白话;进程是一个具体的应用程序,线程是进程中的一个分支,为单独完成程序中的某一项或一组功能而存在。应用程序可以有一个或多个进程,一个进程可以有一个或多个线程,其中一个是主线程 前提: 1 我们有了进程概念后,不同程序之间完成切换,我们可以浏览网页 听歌等其他操作, 2 但是现在有另外 阅读全文
posted @ 2018-05-29 15:26 Python哥 阅读(175) 评论(0) 推荐(0)

1 2 下一页