与b站阿婆主(莫烦python)一起学python--001

添加线程 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 的几种情况

  1. 不加join,会默认执行每个线程中的第一个子句
  2. 加join,若有两个线程1,2
    1. 使用线程1.join(),会执行线程1中所有子句
    2. 使用线程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功能

注:多线程返回的结果是没有返回值的 故而可以把结果放在一个长的队列当中

  1. 设定一个函数 对列表中的每一个值 进行平方的运算
  2. 设定多线程函数 multithreading
    1. 设定每一个线程
  3. 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)   

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值