python-15 进程

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

Process 类参数

  • target: 执行的目标任务名称,即子进程要执行的任务
  • args:以元组的形式传参
  • kwargs:以字典的形式传参

方法
start() 开启子进程
is_alive() 判断子进程是否还存活
join() 主进程等待子进程执行结束
常用属性
name:当前进程的别名 默认Process-N
pid:当前进程的进程编号

逻辑和线程类似

from multiprocessing import Process

def sing():
    print("唱歌")

def dance():
    print("跳舞")

if __name__ == '__main__':
    p1 = Process(target=sing)
    p2 = Process(target=dance)

    p1.start()
    p2.start()

PS:进程之间不共享全局变量

进程间的通信

Queue(队列)

q.put():放入队列
q.get():取出最先进去的第一条数据 并从队列中移除 先进先出
q.empty():判断队列是否为空
q.qsize():返回当前队列包含的消息数量
q.full():判断队列是否满了

from queue import Queue

q = Queue(3) #最多可以接受3条 不写或负数则没上限
q.put("张三")
q.put("李四")
q.put("王五")

print(q.full())
print(q.get()) # 获取队列的一条消息,然后将其从队列中移除
print(q.full())
---------------------------
True
张三
False

进程间通信:

from multiprocessing import Process, Queue
import time


def wdata(q):
    for i in range(5):
        print("写入的数据是:", i)
        q.put(i)
        time.sleep(1)


def rdata(q):
    while True:
        if q.empty():
            break
        print("读取的数据是:", q.get())


if __name__ == '__main__':
    q = Queue()
    p1 = Process(target=wdata, args=(q,))
    p2 = Process(target=rdata, args=(q,))

    p1.start()
    p1.join() # 阻塞进程
    p2.start()
-------------------------------
写入的数据是: 0
写入的数据是: 1
写入的数据是: 2
写入的数据是: 3
写入的数据是: 4
读取的数据是: 0
读取的数据是: 1
读取的数据是: 2
读取的数据是: 3
读取的数据是: 4
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容