欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python的进程和线程

程序员文章站 2022-04-15 20:04:43
进程 multiprocessing模块提供了一个Process类来代表一个进程对象 多线程 多任务可以由多进程完成,也可以由一个进程内的多线程完成。 我们前面提到了进程是由若干线程组成的,一个进程至少有一个线程。 由于线程是操作系统直接支持的执行单元,因此,高级语言通常都内置多线程的支持,Pyth ......
进程:操作系统分配内存的一个基本单位,进程之间的内存是相互隔离的,如果进程间要相互通信,要靠一个IPC机制 process

线程:一个进程又可以划分为多个线程,线程是进程的执行单元,也是操作系统分配CPU的基本单元  thread

为什么要使用多进程和多线程?
如果一个任务执行时间很长,就可以分解成多线程或多进程,
提升执行效率,改善程序性能,缩短执行时间
改善用户体验,让用户获得更好的用户体验


 

进程

multiprocessing模块提供了一个Process类来代表一个进程对象

import time
from multiprocessing import Process
import os

count = 0


def output(string):
    global count
    while count < 10:
        print(string, end='', flush=True)
        count += 1


def main():
    p1 = Process(target=output, args=('Ping', ))
    p1.start()
    p2 = Process(target=output, args=('Pong',))
    p2.start()

多线程

多任务可以由多进程完成,也可以由一个进程内的多线程完成。

我们前面提到了进程是由若干线程组成的,一个进程至少有一个线程。

由于线程是操作系统直接支持的执行单元,因此,高级语言通常都内置多线程的支持,Python也不例外,并且,Python的线程是真正的Posix Thread,而不是模拟出来的线程。

Python的标准库提供了两个模块:_threadthreading_thread是低级模块,threading是高级模块,对_thread进行了封装。绝大多数情况下,我们只需要使用threading这个高级模块。

启动一个线程就是把一个函数传入并创建Thread实例,然后调用start()开始执行

from threading import Thread

count = 0


class PrintThread(Thread):

    def __init__(self, string, count):
        super().__init__()
        self._string = string
        self._count = count

    def run(self):
        for _ in range(self._count):
            print(self._string, end='', flush=True)


def main():
    PrintThread('Ping', 10).start()
    PrintThread('Pong', 10).start()

创建线程的两种方式
1. 直接创建Thread对象并通过target参数指定线程启动后要执行的任务
2. 继承Thread自定义线程 通过重写run方法指定线程启动后执行的任务