_thread模块
function - 线程函数。
args - 传递给线程函数的参数,他必须是个tuple类型。
kwargs - 可选参数
import _thread,time
def thread_handle(thread_name,delay):#定义多线程的处理函数
for num in range(10):
time.sleep(delay)
print("【%s】num = %s" % (thread_name,num))
def main():
for item in range(10):
_thread.start_new_thread(thread_handle,("Thread - %s" % item, 1))
time.sleep(200)
if __name__ == '__main__':
main()
thread 模块已被废弃。用户可以使用 threading 模块代替。所以,在 Python3 中不能再使用"thread" 模块。为了兼容性,Python3 将 thread 重命名为 “_thread”。
threading模块
threading.currentThread(): 返回当前的线程变量。
threading.enumerate(): 返回一个包含正在运行的线程的list。正在运行指线程启动后、结束前,不包括启动前和终止后的线程。
threading.activeCount(): 返回正在运行的线程数量,与len(threading.enumerate())有相同的结果。
除了使用方法外,线程模块同样提供了Thread类来处理线程,Thread类提供了以下方法:
run(): 用以表示线程活动的方法。
start():启动线程活动。
join([time]): 等待至线程中止。这阻塞调用线程直至线程的join() 方法被调用中止-正常退出或者抛出未处理的异常-或者是可选的超时发生。
isAlive(): 返回线程是否活动的。
getName(): 返回线程名。
setName(): 设置线程名
import threading,time
def thread_handle(delay):#定义多线程的处理函数
for num in range(10):
time.sleep(delay)
print("【%s】num = %s" % (threading.current_thread().name,num))
def main():
for item in range(10):#通过循环的方式创建进程
thread = threading.Thread(target=thread_handle,args=(1,),name="执行线程-%s"% item)
thread.start()#启动线程
print("主线程ID:%s 主线程名称:%s" %(threading.current_thread().ident,threading.current_thread().name))
print("当前活跃的线程个数:%s" % threading.active_count()) #存活的线程个数
print("当前活跃的线程信息:%s" % threading.enumerate()) #线程信息
if __name__ == '__main__':
main()
threading(面向对象写法)
继承threading.Thread
import threading,time
class MyThread(threading.Thread):
def __init__(self, thread_name, delay):
super().__init__(name=thread_name)# 将线程名称传递给父类构造
self.__delay = delay #保存延迟时间
def run(self): #线程的主体方法
for num in range(5):
time.sleep(self.__delay)
print("【%s】num = %s" % (threading.current_thread().getName(), num))
def main():
for item in range(10):#通过循环的方式创建进程
thread = MyThread("执行线程 - %s" % item, 1)#实例化线程对象
thread.start()#启动多线程
if __name__ == '__main__':
main()
threading守护线程
守护线程会随着线程同时存在,如果程序执行完毕了,那么守护线程也会消失
import threading,time
class MyThread(threading.Thread):
def __init__(self, thread_name, delay, count):
super().__init__(name=thread_name)# 将线程名称传递给父类构造
self.__count = count#线程执行次数
self.__delay = delay #保存延迟时间
def run(self): #线程的主体方法
for num in range(self.__count):
time.sleep(self.__delay)
print("【%s】num = %s" % (threading.current_thread().getName(), num))
def main():
for item in range(10):#通过循环的方式创建进程
thread = MyThread("执行线程 - %s" % item, 2, 5)#实例化线程对象
daemo_thread = MyThread("守护线程", 1, 999)#守护线程
daemo_thread.setDaemon(True)#线程设置为守护线程
daemo_thread.start()
thread.start()#启动多线程
if __name__ == '__main__':
main()
参考https://www.runoob.com/python3/python3-multithreading.html