python 线程与进程学习(7)----进程之间的通信Queue

前言

    记录一下学习进度.

1.进程之间的通信

    我们都知道两个进程之间的内存是相互独立的,A进程不能访问B进程的数据,包括主进程和子进程,主进程也是不能访问子进程的数据的.要想实现数据之间的交流传递,有很多方式,这里先介绍其中的一种:Queue.

2.进程Queue

    这里的Queue和之前提到的queue不是同一个,之间提到的queue是线程中的queue,而现在提到的Queue是进程中的Queue,它们的用法类似,但是功能不一样
(1) 线程之间的数据交互

import queue
import threading


def func():
    q.put([42,'fan','ok'])

if __name__ == '__main__':
    q = queue.Queue()
    p = threading.Thread(target=func)
    p.start()
    print(q.get())

执行结果:

[42, 'fan', 'ok']

同一个进程内的线程共享同一片内存区域,这些线程之间可以实现数据的传递,修改能.在这个例子中,实现了子线程访问主线程数据.

(2)进程之间的通信

from multiprocessing import Process,Queue



def func(q):
    q.put([42,'fan','ok'])

if __name__ == '__main__':
    q = Queue()
    p = Process(target=func,args=(q,))
    p.start()
    print(q.get())

执行结果:

[42, 'fan', 'ok']

注:进程Queue的使用方法和线程的Queue的使用方法相同,但是进程中的Queue只是实现了数据的传递,并没有实现数据的修改.

3.实现一个简单的读写操作

from multiprocessing import Process,Queue
import os


def wp(q):  
    print('{} 进程开始写入:'.format(os.getpid()))     # 获取当前进程id
    for i in range(10):
        print('将{}写入队列'.format(i))
        q.put(i)

def rq(q):
    print('{}进程开始读取:'.format(os.getpid()))
    while True:
        if q.empty():
            break
        else:
            print('读取数据为:',q.get())


if __name__ == '__main__':
    q = Queue()             # 创建一个Queue实例

    w = Process(target=wp,args=(q,))
    w.start()
    w.join()

    r = Process(target=rq,args=(q,))
    r.start()

执行结果

31719 进程开始写入:0写入队列
将1写入队列
将2写入队列
将3写入队列
将4写入队列
将5写入队列
将6写入队列
将7写入队列
将8写入队列
将9写入队列
31721进程开始读取:
读取数据为: 0
读取数据为: 1
读取数据为: 2
读取数据为: 3
读取数据为: 4
读取数据为: 5
读取数据为: 6
读取数据为: 7
读取数据为: 8
读取数据为: 9

写在最后

    本文是个人的一些学习笔记,如有侵权,请及时联系我进行删除,谢谢大家.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值