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())
  • 相关阅读:
    shell习题第12题:批量创建用户
    shell习题第11题:输入数字执行命令
    二、python数据类型、字符编码、文件处理
    C语言之控制语言:分支和跳转
    c语言之控制语句:循环
    C语言之运算符、表达式和语句
    Python集合及其运算
    Python文本处理
    Python迭代器与格式化
    Python装饰器
  • 原文地址:https://www.cnblogs.com/TMesh/p/11568081.html
Copyright © 2011-2022 走看看