python模块学习---多线程处理

在介绍 thread 之前,先看一段代码,猜猜程序运行完成之后,在控制台上输出的结果是什么?

import thread, time
count = 0
def threadTest():
    global count
    for i in xrange(10000):
        count += 1
for i in range(10):
    thread.start_new_thread(threadTest, ())
	
time.sleep(3)
print count

输出结果:3018

thread.start_new_thread ( function args [ , kwargs ] )函数将创建一个新的线程,并返回该线程的标识符(标识符为整数)。参数 function 表示线程创建之后,立即执行的函数,参数 args 是该函数的参数,它是一个元组类型;第二个参数 kwargs 是可选的,它为函数提供了命名参数字典。函数执行完毕之后,线程将自动退出。如果函数在执行过程中遇到未处理的异常,该线程将退出,但不会影响其他线程的执行。 下面是一个简单的例子:

import thread, time
def threadFunc(a, b, c, d):
    print time.strftime('%H:%M:%S', time.localtime()), a
    time.sleep(1)    
    print time.strftime('%H:%M:%S', time.localtime()), b
    time.sleep(1)
    print time.strftime('%H:%M:%S', time.localtime()), c
    time.sleep(1)
    print time.strftime('%H:%M:%S', time.localtime()), d
    time.sleep(1)
    
thread.start_new_thread(threadFunc, (1, 2, 3, 4))
time.sleep(4)
print time.strftime('%H:%M:%S', time.localtime()), 'over'

thread.exit ()结束当前线程。调用该函数会触发 SystemExit 异常,如果没有处理该异常,线程将结束。

thread.get_ident ()返回当前线程的标识符,标识符是一个非零整数。

thread.allocate_lock() #创建一个琐对象
lock.acquire ( [ waitflag ] )获取琐。函数返回一个布尔值,如果获取成功,返回 True ,否则返回 False 。参数 waitflag 的默认值是一个非零整数,表示如果琐已经被其他线程占用,那么当前线程将一直等待,只到其他线程释放,然后获取访琐。如果将参数 waitflag 置为 0 ,那么当前线程会尝试获取琐,不管琐是否被其他线程占用,当前线程都不会等待.
lock.locked()判断琐是否被占用。
lock.release()释放所占用的琐
再一次重新编写刚开始的程序,我们给线程加上锁,代码如下:

import thread, time

count = 0
lock = thread.allocate_lock()

def threadTest():
    global count, lock
    lock.acquire()
    
    print lock.locked()
    
    for i in xrange(1000):
        count += 1
    
    lock.release()
    
for i in range(10):
    thread.start_new_thread(threadTest, ())

time.sleep(3)

print count


则运行结果:10*1000 = 10000

你可能感兴趣的:(thread,多线程,python)