python开发之路之线程、进程、协程
时间:2016-01-07 01:11:59
收藏:0
阅读:212
一、多进程和多线程
共同点:
让多个CPU同时处理请求
区别:
1.多线程中的线程在内存空间这一点上是共享的,进程与进程使用的是不同的内存空间。即创建线程不需要开辟内存空间,而创建新的进程需要为其分配新的内存空间
全局解释器锁(GIL)
在每一个进程的“出口”,是python特有的。它的作用是:做到了1个限制,什么限制呢,如果有2个线程同时被调度了,此时全局解释器锁就限制同时只能有1个穿过全局解释器锁,才能被CPU调度
那什么时候该使用多进程,什么时候该使用多线程呢?
- I/O密集型用多线程
- 计算密集型用多进程
线程对象的其它方法:
- start 线程准备就绪,等待CPU调度
- setName 为线程设置名称
- getName 获取线程名称
- setDaemon(True/False) True是设置为后台线程(默认是设置的False,即不写是设置的前台线程)
如果是后台线程,主线程执行过程中,后台线程也在进行,主线程执行完毕后,后台线程不论成功与否,均停止
如果是前台线程,主线程执行过程中,前台线程也在进行,主线程执行完毕后,等待前台线程也执行完成后,程序停止 - join 逐个执行每个线程,执行完毕后继续往下执行,该方法使得多线程变得无意义
- run 线程被cpu调度后执行Thread类对象的run方法
一、线程示例1
thread1.py
#!/usr/bin/env python # -*- coding:utf-8 -*- import threading import time def show(arg): time.sleep(1) print ‘thread‘+str(arg) for i in range(10): #创建1个线程,执行show方法,接收1个参数 t = threading.Thread(target=show,args=(i,)) #t.setDaemon(True)#主线程执行完成之后,就关闭
#设置为前台线程,所有的线程执行完成后才关闭
t.setDaemon(False)
t.start()
print ‘main thread stop‘
thread2.py
#!/usr/bin/env python # -*- coding:utf-8 -*- import threading import time def show(arg): time.sleep(1) print ‘thread‘+str(arg) for i in range(10): #创建1个线程,执行show方法,接收1个参数 t = threading.Thread(target=show,args=(i,))
#设置为后台线程,主线程执行完后就直接关闭
t.setDaemon(True)
t.start()
print ‘main thread stop‘
执行thread1.py,产生如下结果:
执行thread2.py,产生如下结果:
原文:http://www.cnblogs.com/jachy/p/5107832.html
评论(0)