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

    进程:操作系统分配内存的一个基本单位,进程之间的内存是相互隔离的,如果进程间要相互通信,要靠一个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方法指定线程启动后执行的任务

  • 相关阅读:
    MongoDB小结07
    MongoDB小结07
    MongoDB小结06
    MongoDB小结05
    MongoDB小结04
    MongoDB小结03
    MongoDB小结02
    MongoDB小结01
    this与super
    UVa 11174
  • 原文地址:https://www.cnblogs.com/kurusuyuu/p/8637577.html
Copyright © 2011-2022 走看看