您的位置:首页 > 编程语言 > Python开发

day9 python学习随笔

2015-12-21 23:16 531 查看
一、threading
问答:
应用程序、进程、线程关系?

为什么要使用多个CPU ?

为什么要使用多线程?

为什么要使用多进程?

java和C#中的多线程和python多线程的区别?

Python GIL?

线程和进程的选择:计算密集型和IO密集型程序。(IO操作不占用CPU)

1、Python线程
Threading用于提供线程相关的操作,线程是应用程序中工作的最小单元。
上述代码创建了10个“前台”线程,然后控制器就交给了CPU,CPU根据指定算法进行调度,分片执行指令。

更多方法:
start 线程准备就绪,等待CPU调度

setName 为线程设置名称

getName 获取线程名称

setDaemon 设置为后台线程或前台线程(默认)
如果是后台线程,主线程执行过程中,后台线程也在进行,主线程执行完毕后,后台线程不论成功与否,均停止
如果是前台线程,主线程执行过程中,前台线程也在进行,主线程执行完毕后,等待前台线程也执行完成后,程序停止

join 逐个执行每个线程,执行完毕后继续往下执行...

run 线程被cpu调度后执行此方法

2、线程锁
由于线程之间是进行随机调度,并且每个线程可能只执行n条执行之后,CPU接着执行其他线程。所以,可能出现如下问题:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import threading
import time

gl_num = 0

def show(arg):
global gl_num
time.sleep(1)
gl_num +=1
print gl_num

for i in range(10):
t = threading.Thread(target=show, args=(i,))
t.start()

print 'main thread stop'

未使用线程锁
#!/usr/bin/env python
#coding:utf-8

import threading
import time

gl_num = 0

lock = threading.RLock()

def Func():
lock.acquire()
global gl_num
gl_num +=1
time.sleep(1)
print gl_num
lock.release()

for i in range(10):
t = threading.Thread(target=Func)
t.start()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  线程 python