zoukankan      html  css  js  c++  java
  • 4.30线程和进程

    python中实现多线程⾮常简单. 借助Thread类来完成.

    # 线程, 进程
    # 进程是资源单位, 每一个进程至少要有一个线程
    # 线程是执行单位
    
    # 启动每一个程序默认都会有一个主线程
    
    
    # def func():
    #     for i in range(1000):
    #         print("func", i)
    #
    #
    # if __name__ == '__main__':
    #     func()
    #     for i in range(1000):
    #         print("main", i)
    
    #  多线程
    from threading import Thread  # 线程类
    
    
    # def func():
    #     for i in range(1000):
    #         print("func", i)
    #
    #
    # if __name__ == '__main__':
    #     t = Thread(target=func)  # 创建线程并给线程安排任务
    #     t.start()  # 多线程状态为可以开始工作状态, 具体的执行时间由CPU决定
    #
    #     for i in range(1000):
    #         print("main", i)
    
    
    class MyThread(Thread):  #
        def run(self):  # 固定的    -> 当线程被执行的时候, 被执行的就是run()
            for i in range(1000):
                print("子线程", i)
    
    
    if __name__ == '__main__':
        t = MyThread()
        # t.run()  # 方法的调用了. -> 单线程????
        t.start()  # 开启线程
    
        for i in range(1000):
            print("主线程", i)

    多进程:

    from multiprocessing import Process
    from threading import Thread
    
    
    # def func():
    #     for i in range(1000):
    #         print("子进程", i)
    #
    #
    # if __name__ == '__main__':
    #     p = Process(target=func)
    #     p.start()
    #     for i in range(1000):
    #         print("主进程", i)
    
    
    def func(name):  # ??
        for i in range(1000):
            print(name, i)
    
    
    if __name__ == '__main__':
        t1 = Thread(target=func, args=("周杰伦",))  # 传递参数必须是元组
        t1.start()
    
        t2 = Thread(target=func, args=("王力宏",))
        t2.start()

    线程池(很快,就是爬到的东西没有按顺序来):

    # 线程池: 一次性开辟一些线程. 我们用户直接给线程池子提交任务. 线程任务的调度交给线程池来完成
    from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor
    
    
    def fn(name):
        for i in range(1000):
            print(name, i)
    
    
    if __name__ == '__main__':
        # 创建线程池
        with ThreadPoolExecutor(50) as t:
            for i in range(100):
                t.submit(fn, name=f"线程{i}")
        # 等待线程池中的任务全部执行完毕. 才继续执行(守护)
        print("123")
  • 相关阅读:
    14.7.1 重新调整InnoDB系统表空间的大小
    css代码引入方式与基本选择器
    html常用标签
    python数据库操作
    pt-osc使用一则
    mysql优化一则(20170703)
    进程与生产者消费者模型
    面向对象程序设计
    常用模块
    模块与包
  • 原文地址:https://www.cnblogs.com/zhaoyids/p/14903916.html
Copyright © 2011-2022 走看看