码迷,mamicode.com
首页 > 编程语言 > 详细

队列与线程补充

时间:2018-08-29 21:28:31      阅读:211      评论:0      收藏:0      [点我收藏+]

标签:第一个字符   线程   submit   生成器   fun   ext   类型   func   lifo   

队列  (同一个进程内的队列 , 多线程)

  import queue  queue.Queue()  先进先出  queue.lifoQueue()  后进先出  queue.PriorityQueue()  优先级队列

  q = queue.PriorityQueue()

  q.put()   接收的是一个元组

  元组中的第一个参数是 : 表示当前数据的优先级

  元组中的第二个参数是 : 需要存放到队列中的数据

  优先级的比较(表示优先级的类型必须是一致的)

  如果都是int,比数值的大小,优先选出数值较小的

  如果都是str ,比较字符串的大小,(从第一个字符串的ASCAII码开始比较)优先选出ASCAII码中靠前的.

 

线程池

  存放固定数量的线程,这些线程等待任务,一旦有任务,就线程自动执行任务.

  线程的最佳数量 max_workers = (os.CPU_count() or 1) * 5

from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor #线程异步和进程异步
#concurrent.futures  这个模块是异步调用机制
#from multiprocessing import Pool  这个模块既可以异步也可以同步,

def func (num) :
    sum = 0
    for i in range(num) :
        sum += i**2
    print(sum)

if __name__ == __main__:
    p = ThreadPoolExecutor(10)
    for n in range(100):
        #p.submit(func , args=(n,))
        p.submit(func , n)#提交任务
    p.shutdown()#等效于进程池中的close+join  是指让父线程等待池中所有进程执行完所有任务

  

  如何把多个任务放入线程池

  for + submit 的方式提交多个任务

  map(func , iterable)方式去提交多个任务

 

技术分享图片

 

  通过进程池线程池的效率比较

    不管是Pool 的进程池还是ProcessPoolExecutor() 的进程池,执行效率相当

    ThreadPoolExecutor 的效率要差很多

    所以当计算密集时,使用多进程.

 

  线程返回值

    用for + submit 方式提交多个任务,用result方法拿结果

from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor #线程异步和进程异步
#concurrent.futures  这个模块是异步调用机制
#from multiprocessing import Pool  这个模块既可以异步也可以同步,

def func (num) :
    sum = 0
    for i in range(num) :
        sum += i**2
    return sum

if __name__ == __main__:
    p = ThreadPoolExecutor(10)
    re = []
    for n in range(100):
        #p.submit(func , args=(n,))
        r = p.submit(func , n)#提交任务
        re.append(r)
    #p.shutdown()#等效于进程池中的close+join  是指让父线程等待池中所有进程执行完所有任务
    [print(i.result()) for i in re ]
#在pool 进程中那结果,用get方法 , 在ThreadPoolExecutor中拿结果使用result方法

 

    用map的方式提交多个任务, 返回的是生成器对象,用__next__() 方法拿结果

 技术分享图片

 

  回调函数

 

技术分享图片

 

队列与线程补充

标签:第一个字符   线程   submit   生成器   fun   ext   类型   func   lifo   

原文地址:https://www.cnblogs.com/panda-pandeyong/p/9543363.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!