随笔分类 - python 并发编程
摘要:event实现了一个线程通知另外一个线程 线程的一个关键特性是每个线程都是独立运行且状态不可预测。 1.为什么要使用Event对象: 如果程序中的其 他线程需要通过判断某个线程的状态来确定自己下一步的操作,这时线程同步问题就会变得非常棘手。为了解决这些问题,我们需要使用threading库中的Eve
阅读全文
摘要:定时器 就是隔多长时间去触发任务执行 指定n秒后执行某操作 Timer如何使用,看Timer源码 Timer() interval 第一个参数传 间隔时间 function 传执行任务的函数 隔了多少秒后执行这个函数 给函数传参方式 args kwargs Timer用的是Thread模块,每启动一
阅读全文
摘要:一 信号量 信号量也是一把锁,可以指定信号量为5,对比互斥锁同一时间只能有一个任务抢到锁去执行,信号量同一时间可以有5个任务拿到锁去执行 如果说互斥锁是合租房屋的人去抢一个厕所,那么信号量就相当于一群路人争抢公共厕所,公共厕所有多个坑位,这意味着同一时间可以有多个人上公共厕所,但公共厕所容纳的人数是
阅读全文
摘要:GIL与多线程 有了GIL的存在,同一时刻同一进程中只有一个线程被执行 多进程可以利用多核,但是开销大,而python的多线程开销小,但却无法利用多核优势 CPU用来计算 1、对计算来说,cpu越多越好,但是对于I/O来说,再多的cpu也没用2、当然对运行一个程序来说,随着cpu的增多执行效率肯定会
阅读全文
摘要:一 死锁现象 所谓死锁: 是指两个或两个以上的进程或线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程,如下就是死锁 执行结果 解决方法: 二 递归锁 递归锁,在Python中为了支
阅读全文
摘要:GIL与Lock Python已经有一个GIL来保证同一时间只能有一个线程来执行了,为什么这里还需要互斥锁lock? 锁的目的是为了保护共享的数据,同一时间只能有一个线程来修改共享的数据 GIT保证了一个进程内有多个线程,只有一个线程执行,保证python垃圾回收线程安全 结论:保护不同的数据就应该
阅读全文
摘要:python 并发编程 多线程 GIL全局解释器锁基本概念 python 并发编程 多线程 GIL与Lock python 并发编程 多线程 GIL与多线程
阅读全文
摘要:首先需要明确的一点是GIL并不是Python的特性,它是在实现Python解析器(CPython)时所引入的一个概念。 就好比C++是一套语言(语法)标准,但是可以用不同的编译器来编译成可执行代码。 >有名的编译器例如GCC,INTEL C++,Visual C++等。Python也一样,同样一段代
阅读全文
摘要:1.执行一个python程序 ,会产生一个进程 ,然后会在内存生成一份内存空间 先把python解释器代码加载到内存里, python解释器代码就是C语言代码 2. 然后再把 自己写的python文件程序代码 加载到内存 3.然后python解释执行, 把python代码交给CPython解释器是解
阅读全文
摘要:互斥锁 并行变成串行,牺牲效率 保证数据安全,实现局部串行 保护不同的数据,应该加不同的锁 现在一个进程 可以有多个线程 所有线程都共享进程的地址空间 实现数据共享 共享带来问题就会出现竞争 竞争就会出现改乱数据 加上互斥锁 牺牲效率 保证数据安全 通过把并发变成串行
阅读全文
摘要:做完工作这个进程就应该被销毁 单线程情况: 一个进程 ,默认有一个主线程 ,这个主线程执行完代码后 ,就应该自动销毁。然后进程也销毁。 多线程情况: 主线程代表进程结束 一个进程可以开多个线程,默认开启进程 ,首先开一个主线程 ,然后开子线程 ,主线程代码执行完毕后 ,也要等所有子线程 ,执行完毕后
阅读全文
摘要:介绍 默认名字是Thread-1 主线程名字默认是MainThread 启动程序瞬间开启子线程 改主线程名字 current_thread.setName() 主线程等待子线程运行完,主线程再执行 join()
阅读全文
摘要:1.开进程的开销远大于开线程 2 同一进程内的线程共享该进程的数据,进程之间地址空间是隔离的 执行结果如下,p.start ()将开启进程的信号发给操作系统后,操作系统要申请内存空间,让好拷贝父进程地址空间到子进程,开销远大于线程 先打印的是主进程 执行结果如下,几乎是t.start ()的同时就将
阅读全文
摘要:线程理论 python 并发编程 多线程 开启线程的两种方式 python 并发编程 多线程与多进程的区别 python 并发编程 多线程 Thread对象的其他属性或方法 python 并发编程 多线程 守护线程 python 并发编程 多线程 互斥锁 python GIL解释器锁与互斥锁 pyt
阅读全文
摘要:一 threading模块介绍 multiprocess模块的完全模仿了threading模块的接口,二者在使用层面,有很大的相似性 二 开启线程的两种方式 第一种 每造一个进程,默认有一个线程,就是主线程。 进程要想执行,要先造一个主线程,然后由这个进程内的线程去运行代码 上面程序开启了一个进程,
阅读全文
摘要:操作系统比作一家公司,进程相当于一个部门 线程相当于一个部门的成员 进程之间是互相隔离的 一 什么是线程 1. 每启动一个进程 至少有一个线程, 在传统操作系统中,每个进程有一个地址空间,而且默认就有一个控制线程 2. 一个进程里的线程里面的成员 与其他进程的线程的成员 互相隔离数据不共享的 3.同
阅读全文
摘要:生产者消费者模型总结 生产者消费者模型什么时候用? 1、程序中有两类角色 2、引入生产者消费者模型为了解决的问题是 3、如何实现生产者消费者模型 如果使用multiprocessing模块 的Queue 实现生产者和消费者模型,意味着生产者,消费者,Queue三者必须都在同一台服务器上, 这是集中式
阅读全文
摘要:一 生产者消费者模型介绍 为什么要使用生产者消费者模型 生产者指的是生产数据的任务,消费者指的是处理数据的任务, 生产数据目的,是为了给消费者处理。 在并发编程中,如果生产者处理速度很快,而消费者处理速度很慢,那么生产者就必须等待消费者处理完,才能继续生产数据。同样的道理,如果消费者的处理能力大于生
阅读全文
摘要:参数介绍 方法介绍 q.join() 作用是 等队列执行完了 队列数据取完 就执行完了
阅读全文
摘要:python 并发编程 多进程 队列 python 并发编程 多进程 生产者消费者模型介绍 python 并发编程 多进程 生产者消费者模型总结 python 并发编程 多进程 JoinableQueue
阅读全文