python中threading超线程用法实例分析

本文实例讲述了python中threading超线程用法。分享给大家供大家参考。具体分析如下:

threading基于java的线程模型设计。锁(lock)和条件变量(condition)在java中是对象的基本行为(每一个对象都自带了锁和条件变量),而在python中则是独立的对象。python thread提供了java thread的行为的子集;没有优先级、线程组,线程也不能被停止、暂停、恢复、中断。java thread中的部分被python实现了的静态方法在threading中以模块方法的形式提供。

threading 模块提供的常用方法:

threading.currentthread(): 返回当前的线程变量。
threading.enumerate(): 返回一个包含正在运行的线程的list。正在运行指线程启动后、结束前,不包括启动前和终止后的线程。
threading.activecount(): 返回正在运行的线程数量,与len(threading.enumerate())有相同的结果。

threading模块提供的类:

thread, lock, rlock, condition, [bounded]semaphore, event, timer, local.

thread是线程类,与java类似,有两种使用方法,直接传入要运行的方法或从thread继承并覆盖run():

# encoding: utf-8
import threading
# 方法1:将要执行的方法作为参数传给thread的构造方法
def func():
print ‘func() passed to thread’
t = threading.thread(target=func)
t.start()
# 方法2:从thread继承,并重写run()
class mythread(threading.thread):
def run(self):
print ‘mythread extended from thread’
t = mythread()
t.start()

构造方法:

thread(group=none, target=none, name=none, args=(), kwargs={})
group: 线程组,目前还没有实现,库引用中提示必须是none;
target: 要执行的方法;
name: 线程名;
args/kwargs: 要传入方法的参数。

实例方法:

isalive(): 返回线程是否在运行。正在运行指启动后、终止前。
get/setname(name): 获取/设置线程名。
is/setdaemon(bool): 获取/设置是否守护线程。初始值从创建该线程的线程继承。当没有非守护线程仍在运行时,程序将终止。
start(): 启动线程。
join([timeout]): 阻塞当前上下文环境的线程,直到调用此方法的线程终止或到达指定的timeout(可选参数)。

一个使用join()的例子:

# encoding: utf-8
import threading
import time
def context(tjoin):
print ‘in threadcontext.’
tjoin.start()
# 将阻塞tcontext直到threadjoin终止。
tjoin.join()
# tjoin终止后继续执行。
print ‘out threadcontext.’
def join():
print ‘in threadjoin.’
time.sleep(1)
print ‘out threadjoin.’
tjoin = threading.thread(target=join)
tcontext = threading.thread(target=context, args=(tjoin,))
tcontext.start()

运行结果:

in threadcontext.
in threadjoin.
out threadjoin.
out threadcontext.

希望本文所述对大家的python程序设计有所帮助。

Posted in 未分类

发表评论