【day33】多进程之进程间通信

生产者消费者模型出现的问题及解决办法:

1、生产者进程与消费者进程通信完成后,程序卡在消费者进程

  原因:生产者进程与消费者进程的通信用的是Queue队列,消费者进程通过get()方法获取生产者put()在Queue上的消息。而Queue上的消息被get()完之后,消费者进程仍在等待get()新消息,所以进程一直卡在这里。

  解决办法:使用JoinableQueue队列,消费者进程get()到消息后,利用task_done()方法返回一条消息给生产者进程确认,当生产者发送消息完毕后,消费者将返回与生产者消息数相同的确认消息,生产者端再使用.join()方法关闭进程。

2、程序运行完之后,子程序仍然存在。

  原因:子程序运行之后,并没有被删除,会占用内存。

  解决办法:用deamon守护程序删除。deamon守护程序会使子程序随父程序的死亡而消失。定义方法:子程序.daemon。

时间: 2024-10-06 00:30:56

【day33】多进程之进程间通信的相关文章

PYTHON——多进程:进程间通信和数据共享

1.采用Queue队列通信 from multiprocessing import Process, Queue def f(q,n): q.put([42, n, 'hello']) if __name__ == '__main__': q = Queue() p_list=[] for i in range(3): p = Process(target=f, args=(q,i)) p_list.append(p) p.start() print(q.get()) print(q.get()

python基础 多进程 进程间通信 multiprocess

有了之前多线程使用以及线程间queue的基础,多进程以及进程间通信就很好理解了,下面是多进程基本语法以及进程间通信简单示例 1 #多进程基本语法 2 import multiprocessing, time, os 3 4 def process_test(): 5 time.sleep(3) 6 print("my multiprocessing test") 7 print("my pprocess id is",os.getppid()) 8 print(&q

自己动手实现linux-->Shell

在开始代码之前,先来普及一下什么是Shell. Shell英文又称壳层.在计算机中,是指"提供用户使用界面"的"系统"软件,通常指的是命令行界面的命令解析器.一般来说,这个词是指操作系统中,提供访问内核所提供之服务的程序.不过这个词也拿来指应用软件,或是任何在特定组件外围的"软件"...省略300字.....----->感谢360百科特供 常用的Shell分类: bash: 是GNU的Bourne Again Shell,是GNU操作系统上默认的Shell Korn Shell: 是对Bourn

Python高级编程 面向对象、元类、多线程、异步IO、asyncio

—— 面向对象 —— 鸭子类型抽象基类类变量.对象变量的查找顺序静态方法.类方法.实例方法数据封装和私有属性对象的自省机制上下文管理器contextlib实现上下文管理器super函数的查找顺序mixin继承模式的应用 —— asyncio并发编程 —— 事件循环协程嵌套call_soon.call_later.call_atcall_soon_threadsafeThreadPoolExecutor+asyncioasyncio 模拟 http 请求future 和 taskasyncio 同

Python3 与 C# 并发编程之~ 进程先导篇

Linux专项¶ 先写几个问号来概况下今天准备说的内容:(谜底自己解开,文中都有) 你知道Ctrl+C终止进程的本质吗?你知道Kill -9 pid的真正含义吗? 你知道那些跨平台框架(Python,NetCore)在Linux下创建进程干了啥? 你了解僵尸进程和孤儿进程的悲催生产史吗?孤儿找干爹,僵尸送往生想知道不? 想知道创建子进程后怎么李代桃僵吗?ps aux | grep xxx的背后到底隐藏了什么? 你了解Linux磁盘中p类型的文件到底是个啥吗? 为什么要realase发布而不用de

python并发编程之多进程(二):互斥锁(同步锁)&进程其他属性&进程间通信(queue)&生产者消费者模型

一,互斥锁,同步锁 进程之间数据不共享,但是共享同一套文件系统,所以访问同一个文件,或同一个打印终端,是没有问题的, 竞争带来的结果就是错乱,如何控制,就是加锁处理 part1:多个进程共享同一打印终端 #并发运行,效率高,但竞争同一打印终端,带来了打印错乱 from multiprocessing import Process import os,time def work(): print('%s is running' %os.getpid()) time.sleep(2) print('

多进程编程之进程间通信-管道和消息队列

1.进程间通信 Linux作为一种新兴的操作系统,几乎支持所有的Unix下常用的进程间通信方法:管道.消息队列.共享内存.信号量.套接口等等. 2.2.1 管道 管道是进程间通信中最古老的方式,它包括无名管道和有名管道两种,前者用于父进程和子进程间的通信,后者用于运行于同一台机器上的任意两个进程间的通信. 无名管道pipe 无名管道由pipe()函数创建: #include <unistd.h> int pipe(int filedis[2]): 参数filedis返回两个文件描述符:file

python多进程——进程间通信

(一)进程锁 抢票的例子: # -*- coding:utf-8 -*- from multiprocessing import Process, Lock import time import json count = {'count': 1} # 仅剩最后一张票 with open('db.txt', 'w', encoding='utf-8') as f: json.dump(count, f) # 返回剩余票数 def search(): dic = json.load(open('db

Python 3 并发编程多进程之队列(推荐使用)

Python 3 并发编程多进程之队列(推荐使用) 进程彼此之间互相隔离,要实现进程间通信(IPC),multiprocessing模块支持两种形式:队列和管道,这两种方式都是使用消息传递的. 可以往队列里放任意类型的数据 创建队列的类(底层就是以管道和锁定的方式实现): 1 Queue([maxsize]):创建共享的进程队列,Queue是多进程安全的队列,可以使用Queue实现多进程之间的数据传递. 参数介绍: 1 maxsize是队列中允许最大项数,省略则无大小限制. 方法介绍: 1.主要