赞
赏
在 Python3 中,thread 模块已经被改名为了 _thread
,_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.start_new(function, args, kwargs=None)
参数 | 描述 |
---|---|
function | 线程处理函数。 |
args | args 是一个 元祖,该元祖时传递到 function 处理函数的参数。 |
kwargs | 可选的 关键字参数。 |
直接使用 _thread.start_new
就可以开启一个线程,其中 function 为线程处理函数,该函数至少接受一个 参数。
使用 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)
程序运行后,控制台输出如下:
我们首先创建了一个 main 函数,在 main 函数里面,我们使用 thread.start_new 创建了两个线程,两个线程的线程处理函数分别为:handler_haicoder 与 handler_python。
同时,thread.start_new 的第二个参数必须是一个元祖,该元祖是用于传递到线程处理函数的参数,因此,我们在两个线程处理函数里面,都获取了我们传递过去的参数。
最后,运行程序,我们发现,两个线程交替运行,同时,在 main 函数最后,一定要使用 sleep 防止主线程退出,如果主线程退出了,那么我们创建的两个子线程没发继续运行。
在 Python3 中,thread 模块已经被改名为了 _thread
,_thread
模块提供了最基本的线程和互斥锁支持。