multiprocess.queue和multiprocess.pipe有什么区别

时间:2018-12-26 17:13:40

标签: python queue pipe python-multiprocessing

我正在尝试进行一些实时(有点像)网络摄像头视频处理。为了同时抓取所有帧并进行处理,我将帧抓取器和图像处理器作为两个独立的进程运行。为了让他们交流,我试图在使用python 2.7的multiprocessing.queuemultiprocessing.pipe之间做出决定。

我不理解这两类之间的区别。人们使用putget共享数据。另一个使用sendreceive。是否有一个用例,其中一个人比另一个人更喜欢方法?我应该优先选择一种方法吗?

1 个答案:

答案 0 :(得分:0)

#include "LiquidCrystal.h" #include <EEPROM.h> LiquidCrystal lcd(12,11,5,4,3,2); int h = 0; int m = 0; int s = 0; int right = 8; int left = 9; int buttonStateLeft = 0; String when; uint8_t EEPROMaddress_sec = 1; uint8_t EEPROMaddress_min = 2; uint8_t EEPROMaddress_hour = 3; bool clockShown = true; bool menuShown = false; void setup() { lcd.begin(16,2); pinMode(right, INPUT); pinMode(left, INPUT); } void loop() { if(menuShown) { lcd.setCursor(0,0); lcd.print("jozo je kkt"); delay(200); } if(clockShown) { lcd.setCursor(0,0); buttonStateLeft = digitalRead(left); if(buttonStateLeft == HIGH) { clockShown = false; menuShown = true; lcd.clear(); } s = EEPROM.read(EEPROMaddress_sec); m = EEPROM.read(EEPROMaddress_min); h = EEPROM.read(EEPROMaddress_hour); s = s + 1; if(h > 12) when = "PM"; if(h < 12) when = "AM"; if(h == 12) when = "PM"; lcd.print("Cas: "); if(h<10)lcd.print("0"); lcd.print(h); lcd.print(":"); if(m<10)lcd.print("0"); lcd.print(m); lcd.print(":"); if(s<10)lcd.print("0"); lcd.print(s); lcd.print(" "); lcd.print(when); if(s == 60) { s = 0; m = m+1; } if(m == 60) { s = 0; m = 0; h = h+1; } if(h == 24) { m = 0; s = 0; h = 0; } EEPROM.write(EEPROMaddress_sec, s); EEPROM.write(EEPROMaddress_min, m); EEPROM.write(EEPROMaddress_hour, h); delay(1000); } } 是先进先出(FIFO)队列。您可以将其用于单向通信。例如,您的采集卡进程可以multiprocessing.queue帧到队列中,而处理进程可以put()队列中的帧准备就绪时进行处理。

get()是2向通道,可能不适合您的用例。但是,如果您有两个相互之间都在发送和接收数据的进程,则将使用两个连接对象,其中一个对象上的进程A multiprocessing.pipe和另一个对象上的sends(),进程B执行反之。