python中的进程

1、进程

  • 运行起来的程序,叫进程。
  • 运行程序时,先加载在内存,然后告诉OS要做什么操作。
  • 进程创建多任务,占用资源相当大。进程就是在原基础上copy一份主进程资源。
import multiprocessing
   #创建对象
def test1():pass
def test2():pass
def main():
    p1 = multiprocessing.Process(target=test1)
    p2 = multiprocessing.Process(target=test2)
    #新的进程创建
    p1.start()
    p2.start()
main()
  • 资源能共享的共享,实在不能共享的再copy一份。即:写时拷贝
  • 进程占用资源大,线程占用资源小

2、进程、线程对比

  • 进程:实现多任务,资源及代码总称,进程是资源分配的单位。一个进程里面至少有一个主线程。进程间不共享全局变量,互相独立。
  • 线程:实现多任务,先有进程再有线程。真正实现任务的是线程。线程是操作系统调度的单位

3、进程间的通信

  • socket
  • 文件
  • 队列Queue,先进先出。
    耦合度越高,程序越不好,越低越好。通过队列解耦,实现进程间通信。
    Queue只能一个程序,一个电脑里面实现进程间通信,还不能跨电脑。以后使用redis,实现分布式。
import multiprocessing
from multiprocessing import Queue

def write(q):
    data = [1,2,3,4]
    #数据放入队列
    for i in data:
        q.put(i)

    print("数据放入队列中")

def read(q):
    #取数据
    readlist = list()
    while True:
        data = q.get()
        readlist.append(data)
        if q.empty():
            break

    print("数据从队列中取出:",readlist)

def main():
    #创建一个队列,队列长度5000
    q = Queue(5000)

    #创建多个进程,将队列的引用当做实参进行传递
    p1 = multiprocessing.Process(target=write,args=(q,))
    p2 = multiprocessing.Process(target=read,args=(q,))
    #新的进程创建
    p1.start()
    p2.start()

if __name__ == '__main__':
    main()

4、进程池Pool

  • 进程池是一个特殊容器,容纳很多进程。
  • 程序的创建和销毁会花大量时间和资源,所以进程池就可以解决这一问题。

你可能感兴趣的:(python中的进程)