zoukankan      html  css  js  c++  java
  • 线程GIL锁 线程队列 回调函数

    ----------------------------------无法改变风向,可以调整风帆;无法左右天气,可以调整心情。如果事情无法改变,那就去改变观念。

    # # ------------------------------------------------------------------------------------------------------------#


    # # --------------[线程队列]--------------

    # import queue

    #先进先出队列
    # q = queue.Queue(3) #创建了一个长度为3的队列,也就是说,最多只能放3个数据
    #
    # q.put(2)
    # print('>>>>',q.qsize())
    # q.put(5)
    # print('>>>>',q.qsize())
    # q.put(0)
    #
    # # q.put(1)
    # try:
    # q.put_nowait(1)
    # except Exception:
    # print('队列满了')
    # print(q.get())
    # print(q.get())
    # print(q.get())
    # # print(q.get())
    # # print(q.get_nowait())

    #后进先出,先进后出

    # import queue
    #
    # q = queue.LifoQueue(3)
    #
    # q.put(1)
    # q.put(2)
    # q.put(3)
    #
    # print(q.get())
    # print(q.get())
    # print(q.get())

    # 优先级队列

    import queue

    q = queue.PriorityQueue(5)

    q.put((3,33))

    q.put((1,2))
    q.put((1,3))
    # q.put((1,(3,2)))
    # q.put((1,(1,2)))

    q.put((2,22))
    q.put((4,44))


    print(q.get())
    print(q.get())
    print(q.get())
    print(q.get())
    print(q.get())



    # # --------------[创建线程池]--------------

    import time
    from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor
    from multiprocessing import Pool

    def func(n):
    # print(n)
    time.sleep(1)
    return n * n

    if __name__ == '__main__':
    # t_p = ThreadPoolExecutor(max_workers=4)
    t_p = ProcessPoolExecutor(max_workers=4)
    # p_pool = Pool(4)
    res_list = []

    for i in range(10):
    res = t_p.submit(func,i) #异步提交任务
    # print(res.result()) #等待任务的执行结果,拿不到就阻塞,拿到了再运行
    res_list.append(res)

    t_p.shutdown()

    print('主线程结束')

    for res1 in res_list:
    print(res1.result())

    # for i in range(10):
    # res = p_pool.apply_async(func,args=(i,))
    # # print(res)
    # print(res.get())

    # # --------------[进程池的map方法]--------------

    import time
    from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor
    from multiprocessing import Pool

    def func(n):
    # print(n)
    time.sleep(1)
    return n * n

    if __name__ == '__main__':
    t_p = ThreadPoolExecutor(max_workers=4)
    # t_p = ProcessPoolExecutor(max_workers=4)
    # p_pool = Pool(4)
    # res_list = []

    res = t_p.map(func,range(10)) #
    # print(res)
    t_p.shutdown()

    print('主线程结束')
    for i in res:
    print(i)

    # print([t1 for t1 in res])
    # for i in range(10):
    # res = t_p.submit(func,i) #异步提交任务
    # # print(res.result()) #等待任务的执行结果,拿不到就阻塞,拿到了再运行
    # res_list.append(res)
    #
    # t_p.shutdown()
    #
    # print('主线程结束')
    #
    # for res1 in res_list:
    # print(res1.result())

    # for i in range(10):
    # res = p_pool.apply_async(func,args=(i,))
    # # print(res)
    # print(res.get())

    # # --------------[回调函数]--------------


    import time
    from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor
    from multiprocessing import Pool

    def func(n):
    time.sleep(1)
    return n * n

    def call_back(m):
    print('>>>>>',m)
    print(m.result())

    if __name__ == '__main__':
    # t_p = ThreadPoolExecutor(max_workers=4)
    t_p = ProcessPoolExecutor(max_workers=4)
    p_pool = Pool(4)
    res_list = []

    res = t_p.submit(func,10).add_done_callback(call_back)

    # p_pool.apply_async(func,args=(10,),callback=call_back)
    # for i in range(10):
    # res = p_pool.apply_async(func,args=(i,))
    # # print(res)
    # print(res.get())


  • 相关阅读:
    【转载】理解本真的REST架构风格
    Linux常用命令
    使用MongoDB存储集合的一些问题
    AutoMapper快速上手
    JavaScript instanceof 运算符深入剖析
    使用c#对MongoDB进行查询(1)
    centos7安装rabbitmq3.7.9
    nginx1.14.0版本高可用——keepalived双机热备
    nginx1.14.0版本https加密配置
    nginx1.14.0版本负载均衡upstream配置
  • 原文地址:https://www.cnblogs.com/dealdwong2018/p/10058978.html
Copyright © 2011-2022 走看看