• python3自用utils(备忘录)


    1.python多线程编程实例

    1.1最常用的多线程例子

    import threading
    import time
    
    def loop(name):
        for x in range(10):
            print(name + ":" + str(x))
            time.sleep(1)
    
    if __name__ == "__main__":
        threads_pool = []
        for name in ["xxx", "yyy", "zzzz"]:
            t = threading.Thread(target=loop, args=(name,))
            threads_pool.append(t)
            t.start()  # 开启线程任务
    
        for t in threads_pool:
            t.join()  # 主进程等待子线程完成再结束
        print("---done!---")
    

    1.2 线程池threadpool

    import threadpool
    import time
    
    def show(name):
        for x in range(10):
            print("name:{}=>x:{}".format(name,x))
            time.sleep(1)
    
    if __name__ == "__main__":
        # 创建线程池对象
        pool = threadpool.ThreadPool(10)
    
        # 组装任务列表
        name_list = ["张三", "李四", "王五"]
        requests = threadpool.makeRequests(show, name_list)
        
        # 执行任务
        for r in requests:
            pool.putRequest(r)
        # 主进程阻塞等待
        pool.wait()
        print("---done!---")
    

    1.3 线程池futures实现

    使用map:

    无返回值:

    import time
    
    from concurrent import futures
    
    def show(name):
        for x in range(10):
            print("name:{}=>x:{}".format(name,x))
            time.sleep(1)
    
    if __name__ == "__main__":
    
        name_list = ["张三", "李四", "王五"]
        with futures.ThreadPoolExecutor(max_workers=10) as executor:
            executor.map(show, name_list)
        print("---done!---")
    

    获取返回值:

    import time
    
    from concurrent import futures
    
    def show(name):
        for x in range(10):
            print("name:{}=>x:{}".format(name,x))
            time.sleep(0.1)
        return "我是:" + name
    
    if __name__ == "__main__":
    
        name_list = ["张三", "李四", "王五"]
        with futures.ThreadPoolExecutor(max_workers=10) as executor:
            future_to_name = executor.map(show, name_list)
            print(future_to_name)
            for future in future_to_name:
                print(future)
        print("---done!---")
    

    使用submit:

    获取返回值:

    import time
    
    from concurrent import futures
    
    def show(name):
        for x in range(10):
            print("name:{}=>x:{}".format(name,x))
            time.sleep(0.1)
        return "我是:" + name
    
    if __name__ == "__main__":
    
        name_list = ["张三", "李四", "王五"]
        with futures.ThreadPoolExecutor(max_workers=10) as executor:
            future_to_name = [executor.submit(show, name) for name in name_list]
            print(future_to_name)
            for future in futures.as_completed(future_to_name):
                print(future.result())
        print("---done!---")
    

    2.python多进程编程实例

    2.1 基本例子

    from multiprocessing import Process
    import time
    
    def show(name):
        for x in range(10):
            print("name:{}=>x{}".format(name,x))
            time.sleep(1)
    
    if __name__ == '__main__':
        p1 = Process(target=show, args=("我是你爸爸",))
        p2 = Process(target=show, args=("我是你妈妈",))
    
        # 开始多进程任务
        p1.start()
        p2.start()
    
        # 阻塞等待
        p1.join()
        p2.join()
    
        print("---done!---")
    

    2.2进程池futures实现

    import time
    
    from concurrent import futures
    
    def show(name):
        for x in range(10):
            print("name:{}=>x:{}".format(name,x))
            time.sleep(1)
    
    if __name__ == "__main__":
    
        name_list = ["张三", "李四", "王五"]
        with futures.ProcessPoolExecutor(max_workers=10) as executor:
            executor.map(show, name_list)
        print("---done!---")
    
  • 相关阅读:
    fastapi教程进阶
    fastapi快速入门
    Linux yum安装PostgreSQL9.6
    harbor helm仓库使用
    Dockfile文件解析
    K8S概念理解
    转载---Beats:如何使用Filebeat将MySQL日志发送到Elasticsearch
    Elasticsearch中text与keyword的区别
    filebeat知识点
    logstash知识点
  • 原文地址:https://www.cnblogs.com/daigua/p/10193351.html
Copyright © 2020-2023  润新知