Django прерывистая многопоточная общая очередь

Я пытаюсь решить эту простую проблему в django правильным способом

  1. Worker1(thread): django connected to serial device streaming data ~ 1kb/s
  2. 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)
Вернуться на верх