码迷,mamicode.com
首页 > 编程语言 > 详细

python开发之路之线程、进程、协程

时间:2016-01-07 01:13:19      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:

一、多进程和多线程

技术分享

共同点:

  让多个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,产生如下结果:

技术分享

 

python开发之路之线程、进程、协程

标签:

原文地址:http://www.cnblogs.com/jachy/p/5107832.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!