Django прерывистая многопоточная общая очередь
Я пытаюсь решить эту простую проблему в django правильным способом
- Worker1(thread): django connected to serial device streaming data ~ 1kb/s
- Consumer1(thread): reads FIFO (queue) and processes the data as it enters the fifo
** потребитель будет работать с перебоями
Как передать объект очереди вновь созданному потребителю, если рабочий уже работает со своей собственной очередью? Я использую memcached. Могу ли я передать объект очереди таким образом?
Пример ниже работает, потому что я использую глобальные значения. В представлениях Django это будет не так. Мой потребитель будет запускаться в свежем def, который запускается по url...
stop_thread=False
q=queue.Queue(maxsize=100)
connectSerial()
t2= threading.Thread(target=consumer,args=(q),daemon=True).start()
time.sleep(5)
stop_thread=True
def connectSerial():
ser = serial.Serial()
ser.baudrate = 1000000
ser.timeout=1
ser.port = '/dev/ttyACM2'
ser.open()
t1 = threading.Thread(target = readSerial, args = (ser), daemon = True).start()
def readserial(ser):
global stop_thread,q
msg = bytearray()
buf = bytearray() #trimmed at open must add back
while True:
if(stop_thread):
break
try:
while True:
timelast=time.time()
i = max(1, min(2048, ser.in_waiting))
msg = ser.read(i)
buf.extend(msg)
a= msg[0:1][0]
q.put(a)
break
except Exception as e:
stop_thread=True
ser.close()
break
stop_thread=True
ser.close()
def consumer():
global stop_thread,q
while not stop_thread:
if not q.empty():
a=q.get()
b=a*100
print(b)