zoukankan      html  css  js  c++  java
  • 并发编程之线程、线程定时器、进程池、线程池(更新中....)

    线程queue用法

    • import queue

    • q = queue.Queue() 队列 先进先出

    • q = queue.LifoQueue() #堆栈 先进后出

    • q = queue.PriorityQueue() # 可以根据优先级取数据

    线程定时器

    • 导入
      • from threading import Thread,Timer
    • 使用
      • t = Timer(4,task) #过了4秒开启了一个线程

    socket 多线程

    • 服务端

      • import socket
        from threading import Thread
        def task(conn):
            while True:
                try:
                    msg = conn.recv(1024)
                    if len(msg) == 0:break
                    conn.send(msg.upper())
                except Exception:
                    print("客户端关闭了一个链接")
                    break        
        def run():
            while True:
                s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
                s.bind(('127.0.0.1',8020))
                s.listen(5)
                
                while True:
                    conn,addr = s.accept()
                    t = Thread(target=task,args=(conn,))
                    t.start()         
        if __name__ == '__main__':
            run()
                   
        
    • 客户端

      • import socket
        from threading import Thread,currentThread
        def run():
            s = socket.socket()
            s.connect(('127.0.0.1',8020))
            while True:
                msg = f"{currentThread().name}"
                if len(msg) == 0:continue
                s.send(msg.encode('utf-8'))
                Msg = s.recv(1024)
                print(Msg.decode())
        if __name__ == '__main__':
            for i in range(20):
                t = Thread(target=run)
                t.start()
        

    进程池与线程池

    • 进程池代码

      • from concurrent.futures import ProcessPoolExecutor
        from multiprocessing import current_process
        import time
        """ 进程池 """
        def task(i):
            print(f"线程:{current_process().name} 正在执行任务:{i}")
            time.sleep(1)
            return i ** 2
        
        
        def parse(res):
            print(res.result())
        if __name__ == '__main__':
            pool = ProcessPoolExecutor(4)  #定义线程池大小
            for i in range(20):
                res = pool.submit(task,i)
                res.add_done_callback(parse)
        
    • 线程池代码

      • from concurrent.futures import ThreadPoolExecutor
        from threading import currentThread
        import time
        """ 线程池 """
        def task(i):
        # currentThread().name 代表取出线程名字 名字由初始函数构造,可自行更改
            f"{currentThread().name} 在执行任务{i}"
            time.sleep(1)
            return i ** 2
        if __name__ == '__main__':
        # pool = ThreadPoolExecutor(4) 定义线程池大小
            pool = ThreadPoolExecutor(4)
            fu_list = []
            for i in range(20):
        #future = pool.submit(task,i) 提交执行函数和参数到线程池
                future = pool.submit(task, i)
                fu_list.append(future)
        #pool.shutdown() # 关闭了池的入口,会等待所有的任务执行完,结束阻塞
            pool.shutdown()
            for fu in fu_list:
        #print(fu.result()) 打印返回值
                print(fu.result())
        
  • 相关阅读:
    c语言 inline函数
    ubuntu18.04 安装新版本openssl
    convert_mnist_data.cpp
    caffe 安装方法和记录
    【转】jdbc:oracle:thin:@localhost:1521:orcl与jdbc:oracle:thin:@//localhost:1521/orcl区别
    【原创】【HCIA】验证GaussDB 100系统函数to_nchar()是否能支持最大字节长度8000
    【原创】达梦数据库DM7备份与恢复
    【LINUX】操作系统时钟与硬件时钟设置
    【文档】ORACLE RAC 修改SCAN监听端口、VIP网络配置参考文档
    【转】11G R2 RAC: HOW TO IDENTIFY THE MASTER NODE IN RAC
  • 原文地址:https://www.cnblogs.com/kuck/p/11550353.html
Copyright © 2011-2022 走看看