添加线程
本节我们来学习threading模块的一些基本操作,如获取线程数,添加线程等。首先别忘了导入模块:
import threading
获取已激活的线程数
threading.active_count()
# 2
查看所有线程信息
threading.enumerate()
# [<_MainThread(MainThread, started 140736011932608)>, <Thread(SockThread, started daemon 123145376751616)>]
输出的结果是一个<_MainThread(...)>
带多个<Thread(...)>
。
查看现在正在运行的线程
threading.current_thread()
# <_MainThread(MainThread, started 140736011932608)>
添加线程,threading.Thread()
接收参数target
代表这个线程要完成的任务,需自行定义
# -*- coding:utf-8 -*-
import threading
print(threading.active_count())
print(threading.enumerate())
print(threading.current_thread)
def thread_add():
print('This is a thread of %s' % threading.current_thread())
def main():
thread = threading.Thread(target=thread_add)
thread.start()
print(threading.active_count())
if __name__ == '__main__':
main()
Join效果
# -*- coding:utf-8 -*-
import threading
import time
def thread_job():
print("T1 start\n")
for i in range(10):
time.sleep(0.5)
print("T1 finish")
added_thread = threading.Thread(target=thread_job,name='T1')
added_thread.start()
added_thread.join()
print("all done")
要遵循顺序,可以在启动线程后对它调用join
不加join 的效果 运行结果是
T1 start
all done
T1 finish
添加join 的效果 运行结果为
T1 start
T1 finish
all done
储存进程结果 Queue
将数据列表中的数据传入,使用四个线程处理,将结果保存在Queue
中,线程执行完后,从Queue
中获取存储的结果
# -*- coding:utf-8 -*-
import threading
import time
from queue import Queue
def actionM(l,q):
for i in range(len(l)):
l[i]=l[i]**2
q.put(l)
#创建线程
def createThreading():
q = Queue()
threads = []
data = [[1,2,3],[4,5,6],[7,8,9],[10,11,12]]
for i in range(4):
t = threading.Thread(target=actionM,args=(data[i],q))
t.start()
t.join()
threads.append(t)
results = []
for _ in range(4):
results.append(q.get())
print(results)
if __name__ =='__main__':
createThreading()
输出结果 [[1, 4, 9], [16, 25, 36], [49, 64, 81], [100, 121, 144]]