进程/线程

进程是资源单位, 线程是执行单位。

每一个进程至少要有一个线程,启动每一个程序默认都会有一个主线程

1.多线程的两种实现

from threading import Thread

#方法一
def func(name):
    for i in range(10):
        print(name, i)


if __name__ == '__main__':
    t = Thread(target=func, args=("jerry",))      # 创建线程并给线程安排任务
    #参数必须是元组,且最后一个参数后面的逗号不能忘
    t.start()                   # 多线程状态为可以开始工作状态, 具体的执行时间由CPU决定

    for i in range(10):
        print("main", i)


#方法二
class MyThread(Thread):              #创建一个类MyThread,继承父类Thread,
    #可以使用构造函数def __init__(self) 传递参数
    def run(self):                   # 固定的    -> 当线程被执行的时候, 被执行的就是run()
        for i in range(1000):
            print("子线程", i)


if __name__ == '__main__':
    t = MyThread()
    # t.run()                      # 不能用t.run(), 调用了类中的run()方法,为单线程
    t.start()                      # 开启线程

    for i in range(1000):
        print("主线程", i)

 2.多进程的两种实现

与多线程的实现方法基本一样 

from multiprocessing import Process

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)

 3.进程池,线程池

# 线程池: 一次性开辟一些线程. 我们用户直接给线程池子提交任务. 线程任务的调度交给线程池来完成
from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor

def fn(name):
    for i in range(1000):
        print(name, i)


if __name__ == '__main__':
    # 创建50个线程池
    with ThreadPoolExecutor(50) as t:
        for i in range(100):
            t.submit(fn, name=f"线程{i}")
    # 等待线程池中的任务全部执行完毕. 才继续执行(守护)
    print("123")

你可能感兴趣的:(Python基础知识,python,开发语言)