2018年4月15日

16、第七 - 网络编程基础 - 进程间数据交互及共享、进程池的使用

摘要: Python实现多进程间通信的方式有很多种,例如队列,管道等。 但是这些方式只适用于多个进程都是源于同一个父进程的情况。如果多个进程不是源于同一个父进程,只能用共享内存,信号量等方式,但是这些方式对于复杂的数据结构,例如Queue,dict,list等,使用起来比较麻烦,不够灵活。 不同进程间内存是 阅读全文

posted @ 2018-04-15 15:51 C.Q&CHEN 阅读(246) 评论(0) 推荐(0)

2018年4月12日

15、第七 - 网络编程基础 - 多线程的应用场景与多进程基本语法使用

摘要: 关于多线程的用法,但Python多线程并不能真正能发挥作用,因为在Python中,有一个GIL,即全局解释锁,该锁的存在保证在同一个时间只能有一个线程执行任务,也就是多线程并不是真正的并发,只是交替得执行。假如有10个线程炮在10核CPU上,当前工作的也只能是一个CPU上的线程。 虽然Python多 阅读全文

posted @ 2018-04-12 18:24 C.Q&CHEN 阅读(226) 评论(0) 推荐(0)

2018年4月11日

14、第七 - 网络编程基础 - 队列queue和生产者消费者模型

摘要: Python中的Queue库讲解 Queue是python标准库中的线程安全的队列(FIFO)实现,提供了一个适用于多线程编程的先进先出的数据结构,即队列,用来在生产者和消费者线程之间的信息传递。python3中是queue.Queue;python2中是Queue.Queue。业务环境中,一般会第 阅读全文

posted @ 2018-04-11 18:40 C.Q&CHEN 阅读(244) 评论(0) 推荐(0)

2018年4月9日

13、第七 - 网络编程基础 - Python中协程EVENT()函数-事件函数

摘要: Python线程的事件用于主线程控制其他线程的执行,事件主要提供了三个方法wait、clear、set,通过Event来实现两个或多个线程间的交互。 事件处理的机制:全局定义了一个“Flag”,如果“Flag”值为 False,那么当程序执行 event.wait 方法时就会阻塞,如果“Flag”值 阅读全文

posted @ 2018-04-09 18:53 C.Q&CHEN 阅读(651) 评论(0) 推荐(0)

2018年4月8日

12、第七 - 网络编程基础 - 线程中的信号量(Semaphore)

摘要: 互斥锁同时只允许一个线程更改数据,而Semaphore是同时允许一定数量的线程更改数据。简单介绍如下: 信号量用在多线程多任务同步的,一个线程完成了某一个动作就通过信号量告诉别的线程,别的线程再进行某些动作。而互斥锁是用在多线程多任务互斥的,一个线程占用了某一个资源,那么别的线程就无法访问,直到这个 阅读全文

posted @ 2018-04-08 18:40 C.Q&CHEN 阅读(269) 评论(0) 推荐(0)

10、第七 - 网络编程基础 - 递归锁--threading.RLock()

摘要: Python 中的递归锁,其实就是大锁里面包含了小的锁。Python中为了支持在同一线程中多次请求同一资源,python提供了可重入锁RLock 举例说明 --(可以尝试把 threading.RLock() 改为 threading.Lock() 进行验证 )如下: 注:run3 有自己的锁,调用 阅读全文

posted @ 2018-04-08 17:48 C.Q&CHEN 阅读(216) 评论(0) 推荐(0)

11、第七 - 网络编程基础 - GIL VS Lock锁区别

摘要: Python已经有一个GIL来保证同一时间只能有一个线程来执行了,为什么这里还需要lock? Lock是用户级的lock,跟那个GIL没关系。GIL 是Python 中对解析器使用。 看图说话(拿大王的图,做个例子)。。 阅读全文

posted @ 2018-04-08 17:01 C.Q&CHEN 阅读(170) 评论(0) 推荐(0)

9、第七 - 网络编程基础 -线程锁(互拆锁Mutex)--threading.Lock()

摘要: 互斥锁的概念理解:Python编程中,引入了对象互斥锁的概念,来保证共享数据操作的完整性。每个对象都对应于一个可称为” 互斥锁” 的标记,这个标记用来保证在任一时刻,只能有一个线程访问该对象。在Python中我们使用threading模块提供的Lock类。锁的意义,就是只允许一个线程对数据进行更改。 阅读全文

posted @ 2018-04-08 15:43 C.Q&CHEN 阅读(233) 评论(0) 推荐(0)

2018年4月7日

8、第七 - 网络编程基础 - GIL锁介绍

摘要: 什么是全局解释器锁GIL Python代码的执行由Python 虚拟机(也叫解释器主循环,CPython版本)来控制,Python 在设计之初就考虑到要在解释器的主循环中,同时只有一个线程在执行,即同一时刻,只有一个线程在解释器中运行。对Python 虚拟机的访问由全局解释器锁(GIL)来控制,正是 阅读全文

posted @ 2018-04-07 12:01 C.Q&CHEN 阅读(152) 评论(0) 推荐(0)

7、第七 - 网络编程基础 - 守护进程

摘要: 守护进程:设置一个线程是守护线程,就说明这不是一个很重要的线程,对于这样的线程,只要主线程运行结束,就会直接退出。而如果一个线程不是守护线程的话,即使主线程运行结束也不会退出,而是等待所有的非守护线程运行结束,再退出。。简单概念:守护线程主线挂了,子线程会挂掉。非守护线程,主线程挂掉,子线程还会继续 阅读全文

posted @ 2018-04-07 11:40 C.Q&CHEN 阅读(154) 评论(0) 推荐(0)

导航