目录
-多线程使用场景
-多进程
--简单的一个多进程例子
--进程间数据的交互实现方法
---通过Queues和Pipe可以实现进程间数据的传递,但是不能实现数据的共享
---Queues
---Pipe
---通过Manager可以不同进程间实现数据的共享
--进程同步,即进程锁
--进程池
-协程
--先用yield实现简单的协程
--Greenlet
--Gevent
--用协程gevent写一个简单并发爬网页
-事件驱动
--IO多路复用
---用户空间和内核空间
---文件描述符fd
---缓存IO
--IO模式
---阻塞I/O(blocking IO)
---非阻塞I/O
---I/O多路复用(IO multiplexing)
---异步I/O(asynchronous IO)
-关于select poll epoll
--select
--poll
--epoll
--以select方法为例子进行理解
多线程的使用场景
IO操作不占用CPU
计算占用cpu
python多线程不适合cpu密集型操作的任务,适合IO操作密集型的任务
多进程
简单的一个多进程例子:(用于理解对多线程方法的使用)
和线程的方法类似,下面是一个简单的多进程代码
1 #AUTHOR:FAN 2 import time,multiprocessing 3 4 def run(name): 5 time.sleep(2) 6 print("hello",name) 7 8 if __name__ =="__main__": 9 for i in range(6): 10 p = multiprocessing.Process(target=run,args=("dean",)) 11 p.start()
和之前学习的多线程结合在一起使用,代码如下:
1 #AUTHOR:FAN 2 3 import time,threading 4 import multiprocessing 5 6 def thread_run(): 7 print(threading.get_ident()) #这里表示获取线程id 8 9 10 def run(name): 11 time.sleep(2) 12 print("hello",name) 13 t=threading.Thread(target=thread_run) 14 t.start() 15 16 if __name__ =="__main__": 17 for i in range(6): 18 p = multiprocessing.Process(target=run,args=("dean",)) 19 p.start()
运行结果如下:

1 D:python35python.exe D:/python培训/s14/day10/进程与线程结合使用.py 2 hello dean 3 10008 4 hello dean 5 9276 6 hello dean 7 8096 8 hello dean 9 1308 10 hello dean 11 hello dean 12 10112 13 8032 14 15 Process finished with exit code 0
接着我们查看下面代码:
1 #AUTHOR:FAN 2 3 from multiprocessing import Process 4 import os 5 6 7 def info(title): 8 print(title) 9 print('module name:', __name__) 10 print('parent process:', os.getppid()) 11 print('process id:', os.getpid()) 12 print(" ") 13 14 15 def f(name): 16 info('