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

python_way ,day11 多线程

时间:2016-07-19 23:37:31      阅读:263      评论:0      收藏:0      [点我收藏+]

标签:

多线程原理

技术分享

 

def f1(arg)
    print(arg)

#单进程单线程的程序,好比后宫里面就一个慈宁宫 -- 主进程,一个王钢蛋 -- 线程

python中规定一个进程中只能有一个线程被cpu调度

这个的规定是因为python中一把锁:GIL,全局解释器锁

1、一个应用程序可以有多进程,可以有多进程

多进程,多线程目的是并发高,充分利用cpu

 2、计算型操作占用cpu,使用多进程

  io型操作不占用cpu,使用多线程

 

import time

def f1(arg):
    time.sleep(5)
    print(arg)


import threading  #创建线程的模块都在这个模块中
t = threading.Thread(target=f1, args=(123,))  #target 让线程去做什么事,args 传递给f1函数的参数
t.start()               #创建了一个线程已经准备好开始 ,还没有被cpu调度,什么时候被cpu调度还不知道
print("end")            #默认主进程主线程运行到这里会等待,如果设置了t.setDaemon(True)就不等了

 技术分享

 

 

1.主线程 不等待子线程

 t.setDaemon(True)     #默认主线程等待子线程 t.setDaemon(False)

import time

def f1(arg):
time.sleep(5)
print(arg)


import threading #创建线程的模块都在这个模块中

t = threading.Thread(target=f1, args=(123,)) #target 让线程去做什么事,args 传递给f1函数的参数
t.setDaemon(True) #主线程不成子线程执行完就结束了,导致子线程没有执行就结束了
t.start() #创建了一个线程已经准备好开始 ,还没有被cpu调度,什么时候被cpu调度还不知道
print("end") #默认主进程主线程运行到这里会等待,如果设置了t.setDaemon(True)就不等了

 

2.主线程还可以选择 等待子线程的位置  

 t.join()

import time

def f1(arg):
    time.sleep(5)
    print(arg)


import threading  #创建线程的模块都在这个模块中
t = threading.Thread(target=f1, args=(123,))  #target 让线程去做什么事,args 传递给f1函数的参数
t.start()               #创建了一个线程已经准备好开始 ,还没有被cpu调度,什么时候被cpu调度还不知道
print("end1")            
print("end2")            
print("end3")            
t.join(4)                #主线程运行到此等待子线程执行完毕后再执行下面的4,5,6    join中的参数是最多等几秒, 这样执行到最后end6后主线程再等待子线程执行结果
print("end4")            
print("end5")          
print("end6")

  

 如果我就是彻彻底底的不等了怎么办?

那我们就要将 join 和 setDaemon 一起使用了

import time

def f1(arg):
    time.sleep(5)
    print(arg)


import threading  #创建线程的模块都在这个模块中
t = threading.Thread(target=f1, args=(123,))  #target 让线程去做什么事,args 传递给f1函数的参数
t.setDaemon
t.start()               #创建了一个线程已经准备好开始 ,还没有被cpu调度,什么时候被cpu调度还不知道
print("end1")            
print("end2")            
print("end3")            

t.join(4)                #主线程运行到此等待子线程执行完毕后再执行下面的4,5,6    join中的参数是最多等几秒, 这样执行到最后end6后由于上面使用了t.setDaemon(True) 这时主线程也就不等子线程,直接结束了。

print("end4")            
print("end5")          
print("end6")

  

  

 

python_way ,day11 多线程

标签:

原文地址:http://www.cnblogs.com/python-way/p/5685834.html

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