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

python_线程

时间:2016-08-30 17:30:38      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:

Python线程

Threading用于提供线程相关的操作,线程是应用程序中工作的最小单元。

#coding:utf-8


import threading
import time


def run(num):
    print("thread...",num)
    time.sleep(1)


for i in range(10):      #开通10个线程
    t = threading.Thread(target=run,args=(i,))   #创建实例
    t.start()

上述代码创建了10个“前台”线程,然后控制器就交给了CPU,CPU根据指定算法进行调度,分片执行指令。

更多方法:

    • start            线程准备就绪,等待CPU调度
    • setName      为线程设置名称
    • getName      获取线程名称
    • setDaemon   设置为后台线程或前台线程(默认)
                         如果是后台线程,主线程执行过程中,后台线程也在进行,主线程执行完毕后,后台线程不论成功与否,均停止
                          如果是前台线程,主线程执行过程中,前台线程也在进行,主线程执行完毕后,等待前台线程也执行完成后,程序停止
    • join              逐个执行每个线程,执行完毕后继续往下执行,该方法使得多线程变得无意义
    • run              线程被cpu调度后自动执行线程对象的run方法

 

技术分享
import threading
import time
 
 
class MyThread(threading.Thread):
    def __init__(self,num):
        threading.Thread.__init__(self)
        self.num = num
 
    def run(self):#定义每个线程要运行的函数
 
        print("running on number:%s" %self.num)
 
        time.sleep(3)
 
if __name__ == __main__:
 
    t1 = MyThread(1)
    t2 = MyThread(2)
    t1.start()
    t2.start()
自定义线程类

线程锁(Lock、RLock)

由于线程之间是进行随机调度,并且每个线程可能只执行n条执行之后,当多个线程同时修改同一条数据时可能会出现脏数据,所以,出现了线程锁 - 同一时刻允许一个线程执行操作。

简单例子: 

#coding:utf-8


import threading
import time

lock = threading.RLock()     #创建个锁的实例  
def run(num):
    lock.acquire()       #对以下步骤(显示屏幕动作)线程进行锁住(让步骤有个串联执行顺序)
    print("thread...",num)
    lock.release()        #解锁
    time.sleep(1)
    #lock.release()


for i in range(10):      #开通10个线程
    t = threading.Thread(target=run,args=(i,))   #创建实例
    t.start()

例子:

技术分享
#!/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()
BoundedSemaphore:
#coding:utf-8


import threading
import time

#lock = threading.RLock()     #创建个锁的实例
def run(num):

    sp.acquire()       #对以下步骤(显示屏幕动作)线程进行锁住(让步骤有个串联执行顺序)
    print("thread...",num)
    print ‘‘
    #lock.release()        #解锁
    time.sleep(1)
    sp.release()



if __name__ == __main__:

    sp = threading.BoundedSemaphore(3)    #控制每个锁每次可以执行多少个线程

    for i in range(12):      #开通10个线程
        t = threading.Thread(target=run,args=(i,))   #创建实例
        t.start()

while threading.activeCount() !=1:     #当执行完所有动作后线程数默认有一个主线程
    pass
else:
    print --------all threads are finish! ----------

 

 

python_线程

标签:

原文地址:http://www.cnblogs.com/fengzaoye/p/5822442.html

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