进程间数据和通讯

一、进程间的数据

不同进程之间的数据不共享,相互隔离的,子进程操作主进程的数据,主进程不受影响

示例:

from multiprocessing import Process

# 全局变量  谁都可以访问
age = 10
def work(name):
    global age
    # 要想修改 全局变量 需要 使用global
    age += 10
    print(f'我是子进程 name:{name} ,age :{age}')

if __name__ == '__main__':
    p = Process(target=work, args=("阿飞", ))
    p.start() # 启动进程
    p.join()  # 等待子进程结束
    print(f'主进程的age :{age}')

运行结果:

二、进程间通讯——消息队列

消息队列:在内存中创建队列模型,进程通过队列将消息存入,或者从队列中取出消息完成进程之间的通信

示例代码:

from multiprocessing import Process, Queue
import time

def write_data(q):
    # 将数据写入 队列 中
    ls = ['python', 'java', 'c', 'c++', 'go', 'js', 'web前端']
    for i in ls:
        q.put(i)  # 写入队列
        print(f'queue 写入数据:{i}')
        time.sleep(2)

def read_data(q):
    while True:
        # 判断队列是否为空
        if not q.empty():
            # 就可以取数据
            value = q.get() # 获取数据
            print(f'queue 读取数据 {value}')
            time.sleep(3)
        else:
            break

if __name__ == '__main__':
    # 生成队列对象
    q = Queue()
    # 创建进程
    w = Process(target=write_data, args=(q, ))
    r = Process(target=read_data, args=(q, ))
    w.start()
    print(w.name)
    w.join()
    r.start()
    print(r.name)
    r.join()
    print("数据读取完毕")

运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值