


Was sind die Vorteile des Produzenten- und Verbrauchermodells von Python?
生产者消费者模型具体来讲,就是在一个系统中,存在生产者和消费者两种角色,他们通过内存缓冲区进行通信,生产者生产消费者需要的资料,消费者把资料做成产品,从而消耗掉生产的数据。达到供需平衡,不能生产多了浪费,也不能需要消耗资源的时候没有。
multiprocessing-Queue实现
from multiprocessing import Process,Queue #多进程组件,队列 import time,random #生产者方法 def producer(name,food,q): for i in range(4): time.sleep(random.randint(1,3)) #模拟获取数据时间 f = '%s生产的%s%s'%(name,food,i) print(f) q.put(f) #添加进队列 #消费者方法 def consumer(q,name): while True: food = q.get() #如果获取不到,会一直阻塞进程不会结束子进程 # 当队列中的数据是None的时候结束while循环 if food is None: print('%s获取到一个空'%name) break f = '\033[31m%s消费了%s\033[0m' % (name, food) print(f) time.sleep(random.randint(1,3)) # 模拟消耗数据时间 if __name__ == '__main__': q = Queue() # 创建队列 # 模拟生产者 生产数据 p = Process(target=producer, args=('p', '包子', q)) #创建进程 p.start() #启动进程 p1 = Process(target=producer, args=('p1', '烧饼', q)) p1.start() #模拟消费者消费数据 c = Process(target=consumer, args=(q, 'c')) c.start() c1 = Process(target=consumer, args=(q, 'c1')) c1.start() p.join()#阻塞主进程 直到p和p1 子进程结束后才执行q.put() 方法 p1.join()#阻塞主进程 直到p和p1 子进程结束后才执行q.put() 方法 #为了确保生产者生产完所有数据后, #最后一个是None,方便结束子进程中的while循环, #否则会一直等待队列中加入新数据。 q.put(None) q.put(None)
使用Queue
组件实现的缺点就是,实现了多少个消费者consumer进程,就需要在最后往队列中添加多少个None
标识,方便生产完毕结束消费者consumer进程。否则,p.get()
不到任务会阻塞子进程,因为while
循环,直到队列q
中有新的任务加进来,才会再次执行。而我们的生产者只能生产这么多东西,所以相当于程序卡死。
multiprocessing-JoinableQueue实现
from multiprocessing import JoinableQueue,Process import time,random #生产者方法 def producer(name,food,q): for i in range(4): time.sleep(random.randint(1, 2)) f = '%s生产的%s%s'%(name,food,i) q.put(f) print(f) q.join() #一直阻塞,等待消耗完所有的数据后才释放 #消费者方法 def consumer(name,q): while True: food = q.get() print('\033[31m%s消费了%s\033[0m' % (name, food)) time.sleep(random.randint(4,8)) q.task_done() #每次消耗减1 if __name__ == '__main__': q = JoinableQueue() #创建队列 #模拟生产者队列 p1 = Process(target=producer,args=('p1','包子',q)) p1.start() p2 = Process(target=producer,args=('p2','烧饼',q)) p2.start() #模拟消费者队列 c1 = Process(target=consumer,args=('c1',q)) c1.daemon = True #守护进程:主进程结束,子进程也会结束 c1.start() c2 = Process(target=consumer,args=('c2',q)) c2.daemon = True c2.start() p1.join() #阻塞主进程,等到p1子进程结束才往下执行 p2.join() # q.task_done() 每次消耗队列中的 任务数减1 # q.join() 一直阻塞,等待队列中的任务数消耗完才释放 # 因为有 q.join 所有一直会等待 c1,c2 消耗完毕。才会执行 p.join 后面的代码 # 因为 c1 c2 是守护进程,所以到这一步主进程代码执行完毕,主进程会释放死掉, # 所以 c1 c2 也会跟随 主进程释放死掉。
使用JoinableQueue
组件,是因为JoinableQueue
中有两个方法:task_done()
和join()
。首先说join()
和Process
中的join()
的效果类似,都是阻塞当前进程,防止当前进程结束。但是JoinableQueue
的join()
是和task_down()
配合使用的。Process
中的join()
是等到子进程中的代码执行完毕,就会执行主进程join()
下面的代码。而JoinableQueue
中的join()
是等到队列中的任务数量为0
的时候才会执行q.join()
下面的代码,否则会一直阻塞。task_down()
方法是每获取一次队列中的任务,就需要执行一次。直到队列中的任务数为0
的时候,就会执行JoinableQueue
的join()
后面的方法了。所以生产者生产完所有的数据后,会一直阻塞着。不让p1
和p2
进程结束。等到消费者get()
一次数据,就会执行一次task_down()
方法,从而队列中的任务数量减1
,当数量为0
后,执行JoinableQueue
的join()
后面代码,从而p1
和p2
进程结束。
因为p1
和p2
添加了join()
方法,所以当子进程中的consumer
方法执行完后,才会往下执行。从而主进程结束。因为这里把消费者进程c1
和c2
设置成了守护进程,主进程结束的同时,c1
和c2
进程也会随之结束,进程都结束了。所以消费者consumer
方法也会结束。
Das obige ist der detaillierte Inhalt vonWas sind die Vorteile des Produzenten- und Verbrauchermodells von Python?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen





PHP ist hauptsächlich prozedurale Programmierung, unterstützt aber auch die objektorientierte Programmierung (OOP). Python unterstützt eine Vielzahl von Paradigmen, einschließlich OOP, funktionaler und prozeduraler Programmierung. PHP ist für die Webentwicklung geeignet, und Python eignet sich für eine Vielzahl von Anwendungen wie Datenanalyse und maschinelles Lernen.

PHP eignet sich für Webentwicklung und schnelles Prototyping, und Python eignet sich für Datenwissenschaft und maschinelles Lernen. 1.PHP wird für die dynamische Webentwicklung verwendet, mit einfacher Syntax und für schnelle Entwicklung geeignet. 2. Python hat eine kurze Syntax, ist für mehrere Felder geeignet und ein starkes Bibliotheksökosystem.

VS -Code kann zum Schreiben von Python verwendet werden und bietet viele Funktionen, die es zu einem idealen Werkzeug für die Entwicklung von Python -Anwendungen machen. Sie ermöglichen es Benutzern: Installation von Python -Erweiterungen, um Funktionen wie Code -Abschluss, Syntax -Hervorhebung und Debugging zu erhalten. Verwenden Sie den Debugger, um Code Schritt für Schritt zu verfolgen, Fehler zu finden und zu beheben. Integrieren Sie Git für die Versionskontrolle. Verwenden Sie Tools für die Codeformatierung, um die Codekonsistenz aufrechtzuerhalten. Verwenden Sie das Lining -Tool, um potenzielle Probleme im Voraus zu erkennen.

VS -Code kann unter Windows 8 ausgeführt werden, aber die Erfahrung ist möglicherweise nicht großartig. Stellen Sie zunächst sicher, dass das System auf den neuesten Patch aktualisiert wurde, und laden Sie dann das VS -Code -Installationspaket herunter, das der Systemarchitektur entspricht und sie wie aufgefordert installiert. Beachten Sie nach der Installation, dass einige Erweiterungen möglicherweise mit Windows 8 nicht kompatibel sind und nach alternativen Erweiterungen suchen oder neuere Windows -Systeme in einer virtuellen Maschine verwenden müssen. Installieren Sie die erforderlichen Erweiterungen, um zu überprüfen, ob sie ordnungsgemäß funktionieren. Obwohl VS -Code unter Windows 8 möglich ist, wird empfohlen, auf ein neueres Windows -System zu upgraden, um eine bessere Entwicklungserfahrung und Sicherheit zu erzielen.

VS -Code -Erweiterungen stellen böswillige Risiken dar, wie das Verstecken von böswilligem Code, das Ausbeutetieren von Schwachstellen und das Masturbieren als legitime Erweiterungen. Zu den Methoden zur Identifizierung böswilliger Erweiterungen gehören: Überprüfung von Verlegern, Lesen von Kommentaren, Überprüfung von Code und Installation mit Vorsicht. Zu den Sicherheitsmaßnahmen gehören auch: Sicherheitsbewusstsein, gute Gewohnheiten, regelmäßige Updates und Antivirensoftware.

Python eignet sich besser für Anfänger mit einer reibungslosen Lernkurve und einer kurzen Syntax. JavaScript ist für die Front-End-Entwicklung mit einer steilen Lernkurve und einer flexiblen Syntax geeignet. 1. Python-Syntax ist intuitiv und für die Entwicklung von Datenwissenschaften und Back-End-Entwicklung geeignet. 2. JavaScript ist flexibel und in Front-End- und serverseitiger Programmierung weit verbreitet.

PHP entstand 1994 und wurde von Rasmuslerdorf entwickelt. Es wurde ursprünglich verwendet, um Website-Besucher zu verfolgen und sich nach und nach zu einer serverseitigen Skriptsprache entwickelt und in der Webentwicklung häufig verwendet. Python wurde Ende der 1980er Jahre von Guidovan Rossum entwickelt und erstmals 1991 veröffentlicht. Es betont die Lesbarkeit und Einfachheit der Code und ist für wissenschaftliche Computer, Datenanalysen und andere Bereiche geeignet.

Im VS -Code können Sie das Programm im Terminal in den folgenden Schritten ausführen: Erstellen Sie den Code und öffnen Sie das integrierte Terminal, um sicherzustellen, dass das Codeverzeichnis mit dem Terminal Working -Verzeichnis übereinstimmt. Wählen Sie den Befehl aus, den Befehl ausführen, gemäß der Programmiersprache (z. B. Pythons Python your_file_name.py), um zu überprüfen, ob er erfolgreich ausgeführt wird, und Fehler auflösen. Verwenden Sie den Debugger, um die Debugging -Effizienz zu verbessern.
