我正在尝试进行一些实时(有点像)网络摄像头视频处理。为了同时抓取所有帧并进行处理,我将帧抓取器和图像处理器作为两个独立的进程运行。为了让他们交流,我试图在使用python 2.7的multiprocessing.queue
和multiprocessing.pipe
之间做出决定。
我不理解这两类之间的区别。人们使用put
和get
共享数据。另一个使用send
和receive
。是否有一个用例,其中一个人比另一个人更喜欢方法?我应该优先选择一种方法吗?
答案 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执行反之。