Python thread多线程

Python thread多线程教程

Python3 中,thread 模块已经被改名为了 _thread_thread 模块提供了最基本的 线程 和互斥锁支持。

Python thread模块主要方法

方法 说明
_thread.start_new_thread(function,args,kwargs=None) 派生一个新的线程,给定agrs和kwargs来执行function
_thread.allocate_lock() 分配锁对象
_thread.exit() 线程退出
lock.acquire(waitflag=1, timeout=-1) 获取锁对象
lock.locked() 如果获取了锁对象返回true,否则返回false
lock.release() 释放锁
_thread.LockType() 锁对象类型
_thread.get_ident() 获取线程标识符
_thread.TIMEOUT_MAX lock.acquire的最大时间,超时将引发OverflowError
_thread.interrupt_main() 引发主线程KeyboardInterrupt错误,子线程可以用这个函数来终止主线程

thread模块创建线程详解

语法

_thread.start_new(function, args, kwargs=None)

参数

参数 描述
function 线程处理函数。
args args 是一个 元祖,该元祖时传递到 function 处理函数的参数。
kwargs 可选的 关键字参数

说明

直接使用 _thread.start_new 就可以开启一个线程,其中 function 为线程处理函数,该函数至少接受一个 参数

案例

使用 thread 模块创建线程

使用 thread 模块创建两个线程

import _thread import time def handler_haicoder(val): while True: print("thread haicoder run, val =", val) time.sleep(2) def handler_python(val): while True: print("thread python run, val =", val) time.sleep(3) def main(): print("嗨客网(www.haicoder.net)") _thread.start_new(handler_haicoder, ("haicoder", )) _thread.start_new(handler_python, ("python", )) if __name__ == '__main__': main() time.sleep(100)

程序运行后,控制台输出如下:

01 python thread多线程.png

我们首先创建了一个 main 函数,在 main 函数里面,我们使用 thread.start_new 创建了两个线程,两个线程的线程处理函数分别为:handler_haicoder 与 handler_python。

同时,thread.start_new 的第二个参数必须是一个元祖,该元祖是用于传递到线程处理函数的参数,因此,我们在两个线程处理函数里面,都获取了我们传递过去的参数。

最后,运行程序,我们发现,两个线程交替运行,同时,在 main 函数最后,一定要使用 sleep 防止主线程退出,如果主线程退出了,那么我们创建的两个子线程没发继续运行。

Python thread多线程总结

在 Python3 中,thread 模块已经被改名为了 _thread_thread 模块提供了最基本的线程和互斥锁支持。