Python学习之路,点击有全套Python笔记

进程是什么

进程:一个运行的程序(代码)就是一个进程,没有运行的代码叫程序,进程是系统资源分配的最小单位,进程拥有自己独立的内存空间,所有进程间数据不共享,开销大。

进程的几种状态

就绪态:等待调度
执行态:CPU正在执行其功能
等待态:等待某些条件满足

进程的创建

进程的创建-multiprocessing
multiprocessing模块就是跨平台版本的多进程模块,提供了一个Process类来代表一个进程对象,这个对象可以理解为是一个独立的进程,可以执行另外的事情

import time
import multiprocessing

def test1():
    while True:
        print("1-------")
        time.sleep(1)

def test2():
    while True:
        print("2-------")
        time.sleep(1)

def main():
    t1 = multiprocessing.Process(target=test1)
    t2 = multiprocessing.Process(target=test2)
    t1.start()
    t2.start()

if __name__ == '__main__':
    main()

进程之间不共享全局变量

进程与线程的对比

功能:

  • 进程:能够完成多任务,比如一台电脑上同时运行多个QQ
  • 线程:能够完成多任务,比如一个QQ中多个聊天窗口

定义的不同

  • 进程是系统进行资源分配和调度的一个独立单位.
  • 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.

区别:

  • 一个程序至少有一个进程,一个进程至少有一个线程.
  • 线程的划分尺度小于进程(资源比进程少),使得多线程程序的并发性高。
  • 进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率
  • 线线程不能够独立执行,必须依存在进程中

优缺点:
线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源的管理和保护;而进程正相反。

进程之间通信-Queue

在初始化Queue()对象时(例如q=Queue(),若在括号中没有指定最大可接受的消息数量,获数量为负值时,那么就代表可接受的消息数量没有上限一直到内存尽头)

Queue.qsize():返回当前队列包含的消息数量

Queue.empty():如果队列为空,返回True,反之False

Queue.full():如果队列满了,返回True,反之False

Queue.get([block[,timeout]]):获取队列中的一条消息,然后将其从队列中移除,

import multiprocessing

def download_from_web(q):
    # 模拟从网上下载的数据
    data = [11, 22, 33, 44]
    # 向队列中写入数据
    for temp in data:
        q.put(temp)

    print("----下载器已经下载完了数据并且存入到队列中----")

def analysis_data(q):
    # 数据处理
    # 从队列中获取数据
    watting = list()
    while True:
        data = q.get()
        watting.append(data)

        if q.empty():
            break
    # 模拟处理数据
    print(watting)


def main():
    # 1、创建一个队列
    q = multiprocessing.Queue()
    # 2、创建多个进程,将队列的引用当作实参传递到里面
    p1 = multiprocessing.Process(target=download_from_web, args=(q,))
    p2 = multiprocessing.Process(target=analysis_data,args=(q,))
    p1.start()
    p2.start()

if __name__ == '__main__':
    main()
进程池Pool