添加线程 add——thread
import threading 多线程模块
def thread_job():
print("This is a added Thread ,number is %s"% threading.current_thread())#输出线程的名字
def main():
added_thread=threading.Thread(target=thread_job)#添加线程,定义这个线程现在在做什么
print(threading.active_count())#算一下现在有多少个激活了的线程
print(threading.enumerate())#枚举,列举
print(threading.current_thread())#正在运行的线程
if __name__=="__main__":
main()
join功能
join 的几种情况
- 不加join,会默认执行每个线程中的第一个子句
- 加join,若有两个线程1,2
- 使用线程1.join(),会执行线程1中所有子句
- 使用线程2.join(),会执行线程2中所有子句
import threading
import time
def thread_job():
print("T1 start\n")
for i in range(10):
time.sleep(0.1)
print("T1 finish\n")
def thread_job2():
print("T2 start\n")
print("T2 finish\n")
print("T@@@@@@")
def main():
added_thread = threading.Thread(target=thread_job,name="T1") # 添加线程,定义这个线程现在在做什么
# print(threading.active_count())#算一下现在有多少个激活了的线程
# print(threading.enumerate())#枚举,列举
# print(threading.current_thread())#正在运行的线程
added_thread2 = threading.Thread(target=thread_job2, name="T2")
added_thread.start()#开始执行某个进程对象
# added_thread.join()
added_thread2.start()#开始执行线程对象
# added_thread2.join()
print("all done\n")#输出结果
if __name__ == "__main__":#实例化
main()
QUEUE功能
注:多线程返回的结果是没有返回值的 故而可以把结果放在一个长的队列当中
- 设定一个函数 对列表中的每一个值 进行平方的运算
- 设定多线程函数 multithreading
- 设定每一个线程
- Queue 模块中的常用方法:
Queue.Queue(maxsize=0) FIFO, 若是maxsize小于1就表示队列长度无限
Queue.qsize() 返回队列的大小
Queue.empty() 若是队列为空,返回True,反之False
Queue.full() 若是队列满了,返回True,反之False
Queue.get([block, [timeout]]) 读队列,timeout为等待时间
Queue.put(item, [block, [timeout]]) 写队列,timeout为等待时间
Queue.queue.clear() 清空队列
多线程的效率-GIL
注:不一定有效率
多线程并不是把任务同时分给每一个人做任务 这个是不一定的 多线程有一个全局的控制
其实python只能让一个线程在同一时间做一个运算任务
import threading
from queue import Queue
import copy
import time
def job(l,q):
res = sum(l)
q.put(res)
def multithreading(l):
q=Queue()
threads = [ ]
for i in range(4):
t = threading.Thread(target=job,args=(copy.copy(l),q),name="T%i"%i)
t.start()
threads.append(t)
[t.join() for t in threads]
total = 0
for _ in range(4):
total++q.get()
print(total)
def normal(l):
total = sum(l)
print(total)
if __name__ == '__main__':
l=list(range(10000000))
s_t = time.time()
normal(l*4)
print("normal:",time.time()-s_t)
s_t=time.time()
multithreading(l)
print("multithreading:",time.time()-s_t)