进程间通信 | 学习笔记

简介: 快速学习进程间通信,介绍了进程间通信系统机制, 以及在实际应用过程中如何使用。

开发者学堂课程【Python 入门 2020年版进程间通信】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/639/detail/10473


进程间通信

 

内容介绍:

一、进程间通信


一、进程间通信

进程间通信举例讲解

进程间通信跟线程间通信很像

1.举例代码:

import os, multiprocessing, queue

def producer():

for i in range(10):

print('生产了+++++pid{}{}'. format(os.getpid(), i))

q.put(‘pid{}[}’. format(os.getpid(),i))

def consumer():

for i in range(10):

print( '消费了------'.format(q.get()))

if_ name_ =='_ main_' :

q=queue.Queue()

p1 = multiprocessing. Process (target=producer)

p1.start()

c2 = multiprocessing. Process (target=consumer)

c2.start()

运行发现 q 没有定义,因为两个进程之间要共同访问全局变量,但是多进程不共享全局变量。

加了 time.sleep 也不行,来一个局部变量 x,再用 args 把全局变量传过去。

2.代码:

import os, multiprocessing, queue

def producer(x):

for i in range(10):

print('生产了+++++pid{}{}'. format(os.getpid(), i))

q.put(‘pid{}[}’. format(os.getpid(),i))

def consumer(x):

for i in range(10):

print( '消费了------{}'.format(x.get()))

if_ name_ =='_ main_' :

q=queue.Queue()

p1 = multiprocessing. Process (target=producer,args=(q,))

p1.start()

c2 = multiprocessing. Process (target=consumer,args=(q,))

c2.start()

运行时报错, queue 导错了

3.代码:

import os, multiprocessing,time

def producer(x):

for i in range(10):

time.sleep(0.5)

print('生产了+++++pid{}{}'. format(os.getpid(), i))

q.put(‘pid{}[}’. format(os.getpid(),i))

def consumer(x):

for i in range(10):

time.sleep(0.4)

print( '消费了------{}'.format(x.get()))

if_ name_ =='_ main_' :

q=multiprocessing.Queue()

p1 = multiprocessing. Process (target=producer,args=(q,))

p1.start()

c2 = multiprocessing. Process (target=consumer,args=(q,))

c2.start()

运行结果:

生产了++++++pid1516  0

消费了-------pid1516  0

生产了++++++pid1516  1

消费了-------pid1516  1

......

4.多个进程生产代码:

import os, multiprocessing,time

def producer(x):

for i in range(10):

time.sleep(0.5)

print('生产了+++++pid{}{}'. format(os.getpid(), i))

q.put(‘pid{}[}’. format(os.getpid(),i))

def consumer(x):

for i in range(10):

time.sleep(0.4)

print( '消费了------{}'.format(x.get()))

if_ name_ =='_ main_' :

q=multiprocessing.Queue()

p1 = multiprocessing. Process (target=producer,args=(q,))

P2 = multiprocessing. Process (target=producer,args=(q,))

P3 = multiprocessing. Process (target=producer,args=(q,))

p1.start()

P2.start()

P3.start()

c2 = multiprocessing. Process (target=consumer,args=(q,))

c2.start()

运行结果:

生产了++++++pid9172  0

生产了++++++pid7776  0

生产了++++++pid1188  0

消费了-------pid9172  0

消费了-------pid7776  0

生产了++++++pid9172  1

生产了++++++pid7776  1

生产了++++++pid1188  1

消费了-------pid1188  0

消费了-------pid9172  1

生产了++++++pid9172  2

生产了++++++pid7776  2

生产了++++++pid1188  2

消费了-------pid1188  1

生产了++++++pid9172  3

......

注意:q 的类型是 multiprocessing 里的,进程里 q 要存参,线程不用。

相关文章
|
Kubernetes Ubuntu Cloud Native
深入剖析Kubernetes学习笔记-05 | 白话容器基础(一):从进程说开去
深入剖析Kubernetes学习笔记-05 | 白话容器基础(一):从进程说开去
131 0
|
消息中间件 Shell Linux
计算机操作系统学习笔记(7)——进程通信
计算机操作系统学习笔记(7)——进程通信
91 0
|
6月前
|
Linux 调度
Linux学习笔记十一:进程管理
Linux学习笔记十一:进程管理
|
存储 安全 Linux
Go语言学习笔记-进程和线程
Go语言学习笔记-进程和线程
56 0
Go语言学习笔记-进程和线程
|
Linux
计算机操作系统学习笔记(6)——进程和线程
计算机操作系统学习笔记(6)——进程和线程
76 0
|
存储 算法 程序员
[计算机操作系统(慕课版)]第二章 进程的描述与控制(学习笔记)
[计算机操作系统(慕课版)]第二章 进程的描述与控制(学习笔记)
|
安全 Java
Java复习与学习笔记----进程和线程与同步(下)
Java复习与学习笔记----进程和线程与同步(下)
|
Java 调度
Java复习与学习笔记----进程和线程与同步(上)
Java复习与学习笔记----进程和线程与同步
|
Linux
Linux学习笔记(六) 进程管理
Linux学习笔记(六) 进程管理
89 0
|
安全 算法 调度
411操作系统学习笔记——进程与线程、处理机调度、同步与互斥(PV操作)、死锁(四)
411操作系统学习笔记——进程与线程、处理机调度、同步与互斥(PV操作)、死锁
165 1
411操作系统学习笔记——进程与线程、处理机调度、同步与互斥(PV操作)、死锁(四)