zoukankan      html  css  js  c++  java
  • GIL 进程池和线程池 同步异步阻塞非阻塞

    #1 计算密集型应该使用多进程
    # from multiprocessing import Process
    # from threading import Thread
    #
    # import time
    # # import os
    # # print(os.cpu_count())
    #
    # def task1():
    #     res=0
    #     for i in range(1,100000000):
    #         res+=i
    #
    # def task2():
    #     res=0
    #     for i in range(1,100000000):
    #         res+=i
    #
    # def task3():
    #     res=0
    #     for i in range(1,100000000):
    #         res+=i
    #
    # def task4():
    #     res=0
    #     for i in range(1,100000000):
    #         res+=i
    #
    # if __name__ == '__main__':
    #     # p1=Process(target=task1)
    #     # p2=Process(target=task2)
    #     # p3=Process(target=task3)
    #     # p4=Process(target=task4)
    #
    #     p1=Thread(target=task1)
    #     p2=Thread(target=task2)
    #     p3=Thread(target=task3)
    #     p4=Thread(target=task4)
    #     start_time=time.time()
    #     p1.start()
    #     p2.start()
    #     p3.start()
    #     p4.start()
    #     p1.join()
    #     p2.join()
    #     p3.join()
    #     p4.join()
    #     stop_time=time.time()
    #     print(stop_time - start_time)
    
    
    
    #2 IO密集型应该使用多线程
    from multiprocessing import Process
    from threading import Thread
    
    import time
    
    
    def task1():
        time.sleep(3)
    
    def task2():
        time.sleep(3)
    
    def task3():
        time.sleep(3)
    
    def task4():
        time.sleep(3)
    
    if __name__ == '__main__':
        # p1=Process(target=task1)
        # p2=Process(target=task2)
        # p3=Process(target=task3)
        # p4=Process(target=task4)
    
        # p1=Thread(target=task1)
        # p2=Thread(target=task2)
        # p3=Thread(target=task3)
        # p4=Thread(target=task4)
        # start_time=time.time()
        # p1.start()
        # p2.start()
        # p3.start()
        # p4.start()
        # p1.join()
        # p2.join()
        # p3.join()
        # p4.join()
        # stop_time=time.time()
        # print(stop_time - start_time) #3.138049364089966
    
        p_l=[]
        start_time=time.time()
    
        for i in range(500):
            p=Thread(target=task1)
            p_l.append(p)
            p.start()
    
        for p in p_l:
            p.join()
    
        print(time.time() - start_time)

    from socket import *
    from threading import Thread
    from concurrent.futures import ProcessPoolExecutor,ThreadPoolExecutor
    
    tpool=ThreadPoolExecutor(3)
    
    def communicate(conn,client_addr):
        while True:  # 通讯循环
            try:
                data = conn.recv(1024)
                if not data: break
                conn.send(data.upper())
            except ConnectionResetError:
                break
        conn.close()
    
    
    def server():
        server=socket(AF_INET,SOCK_STREAM)
        server.bind(('127.0.0.1',8080))
        server.listen(5)
    
        while True: # 链接循环
            conn,client_addr=server.accept()
            print(client_addr)
            # t=Thread(target=communicate,args=(conn,client_addr))
            # t.start()
            tpool.submit(communicate,conn,client_addr)
    
        server.close()
    
    if __name__ == '__main__':
        server()
    
    客服端
    from socket import *
    
    client=socket(AF_INET,SOCK_STREAM)
    client.connect(('127.0.0.1',8080))
    
    while True:
        msg=input('>>>: ').strip()
        if not msg:continue
        client.send(msg.encode('utf-8'))
        data=client.recv(1024)
        print(data.decode('utf-8'))
    
    client.close()

    from concurrent.futures import ProcessPoolExecutor,ThreadPoolExecutor
    import time,os,random
    
    def task(x):
        print('%s 接客 '%os.getpid())
        time.sleep(random.randint(2,5))
        return x**2
    if __name__ == '__main__':
        p=ProcessPoolExecutor(max_workers=2)#=默认开启的进程数是cpu的核数
        for i in range(20):
            p.submit(task,i)
            
    线程池
    from concurrent .futures import ProcessPoolExecutor,ThreadPoolExecutor
    import time,os,random
    
    def task(x):
        print('%s 接客 '%os.getpid())
        time.sleep(random.randint(2,5))
        return x**2
    if __name__ == '__main__':
        p=ThreadPoolExecutor()
    
        for i in range(20):
            p.submit(task,i)

    from concurrent.futures import ProcessPoolExecutor,ThreadPoolExecutor
    import time,os,random
    
    def task(x):
        print('%s 接客' %x)
        time.sleep(random.randint(1,3))
        return x**2
    
    if __name__ == '__main__':
        # 异步调用
        # p=ThreadPoolExecutor(4) # 默认开启的线程数是cpu的核数*5
        #
        # # alex,武佩奇,杨里,吴晨芋,张三
        #
        # obj_l=[]
        # for i in range(10):
        #     obj=p.submit(task,i)
        #     obj_l.append(obj)
        #
        # # p.close()
        # # p.join()
        # p.shutdown(wait=True)
        #
        # print(obj_l[3].result())
        # print('主')
    # 同步调用
        p=ThreadPoolExecutor(4) # 默认开启的线程数是cpu的核数*5
    
    
        for i in range(10):
            res=p.submit(task,i).result()
    
        print('')
    
    
    close()
    join()不允许往里面提交数  老的线程池

    拿结果

  • 相关阅读:
    细说javascripe事件传播流程
    由浅入深的讲述Get和Post的区别
    使用windowsAPI 加载shellcode
    从PE资源加载和执行Shellcode
    DLL注入
    shellcode注入原理
    asp.net学习--ashx一句话木马
    asp.net学习--asmx一句话木马
    asp.net学习--svc一句话木马
    php--莫客服系统代码审计(已申请CNVD)
  • 原文地址:https://www.cnblogs.com/maojiang/p/8963179.html
Copyright © 2011-2022 走看看