zoukankan      html  css  js  c++  java
  • 线程

    目录

    线程队列
    1
    2
    3
    线程定时器
    进程池和线程池
    线程队列
    1
    import queue

    q=queue.Queue()
    q.put('123')
    q.put('456')
    q.put('789')
    print(q.get())
    print(q.get())
    print(q.get())
    q.task_done()

    q.task_done()

    q.task_done()
    q.join() #等到队列里的元素都被消费才进行下一步
    q.put(1)
    print(q.get())
    2
    import queue

    q=queue.LifoQueue() #栈,先进后出
    q.put('123')
    q.put('456')
    q.put('789')
    print(q.get())
    print(q.get())
    print(q.get())
    q.task_done()
    q.task_done()
    q.task_done()
    q.join() #等到队列里的元素都被消费才进行下一步
    q.put(1)
    print(q.get())
    3
    import queue

    q=queue.PriorityQueue() #以元祖的形式输入,第一个整形为优先级,小的先输出
    q.put((1,'123'))
    q.put((4,'456'))
    q.put((2,'789'))
    print(q.get())
    print(q.get())
    print(q.get())
    q.task_done()
    q.task_done()
    q.task_done()
    q.join() #等到队列里的元素都被消费才进行下一步
    q.put((1,'ad'))
    print(q.get())
    线程定时器
    from threading import Thread,Timer
    import time

    def test():
    print('start')
    time.sleep(1)
    print('end')

    t=Timer(3,function=test) #3秒后开启线程
    t.start()
    进程池和线程池
    from concurrent.futures import ThreadPoolExecutor
    import time

    def test():
    print(time.time())
    time.sleep(1)
    # return i**3
    pool=ThreadPoolExecutor(5) #线程池,进程池用ProcessPoolExecutor
    list=[]
    for i in range(20):
    furture=pool.submit(test)
    list.append(furture)
    for i in list:
    print(i.result())
    from concurrent.futures import ProcessPoolExecutor,ThreadPoolExecutor
    from threading import currentThread
    from multiprocessing import current_process
    import time

    def task(i):
    print(f'{currentThread().name} 在执行任务 {i}')
    # print(f'进程 {current_process().name} 在执行任务 {i}')
    time.sleep(1)
    return i**2

    def parse(future):
    # 处理拿到的结果
    print(future.result())

    if name == 'main':
    pool = ThreadPoolExecutor(4) # 池子里只有4个线程
    # pool = ProcessPoolExecutor(4) # 池子里只有4个线程
    fu_list = []
    for i in range(20):
    # pool.submit(task,i) # task任务要做20次,4个线程负责做这个事
    future = pool.submit(task,i) # task任务要做20次,4个进程负责做这个事
    future.add_done_callback(parse)
    # 为当前任务绑定了一个函数,在当前任务执行结束的时候会触发这个函数,
    # 会把future对象作为参数传给函数
    # 这个称之为回调函数,处理完了回来就调用这个函数.

        # print(future.result()) # 如果没有结果一直等待拿到结果,导致了所有的任务都在串行
    
    # pool.shutdown() # 关闭了池的入口,会等待所有的任务执行完,结束阻塞.
    # for fu in fu_list:
    #     print(fu.result())
  • 相关阅读:
    about_并查集
    MST_prim
    MST_kruskal
    物联网的未来:关于物联网的10个预测
    如何展现云计算安全领导力
    虚拟机发展依然强劲,但会被容器取代吗?
    如何从人工智能部署中获取最大价值
    维特根斯坦:为何夸大人工智能是对人性的贬损?
    区块链技术还在不断创新
    区块链真正能用来干什么?这5件事说清楚了
  • 原文地址:https://www.cnblogs.com/TMesh/p/11568081.html
Copyright © 2011-2022 走看看