многопроцессная очередь python всегда пуста - PullRequest
0 голосов
/ 30 декабря 2018

Без причины, даже после того, как я поместил некоторые элементы в очередь, он все равно показывает мне

Queue.empty() == True

Рабочие работают с использованием процесса, отличного от процесса Flask.Если я пытаюсь добавить элемент в очередь с помощью какой-либо подпрограммы Flask, а затем проверяю, не является ли очередь пустой (при помощи другой подпрограммы Flask), я вижу, что очередь заполнена.Но я все еще получаю "очередь пуста" из подпункта workerJob.

from multiprocessing import Queue, Process, Pool


imgQueue = Queue()

@app.route("/send", methods=["POST"])
def sendToQueue():
    # global imgQueue

    imgLocation = request.headers.get('fileLocation')
    nImage = request.data

    imgQueue.put({"location": imgLocation,
                  "image": nImage})


    return "ok"

def workerJob(q):


    while True:
        print(q.empty())
        if (not q.empty()):

            itemFromQueue = q.get()
            print(str(type(itemFromQueue)))
            print(itemFromQueue["location"])
            print(itemFromQueue["image"])


        else:
            print("Queue empty")


        time.sleep(3)

def startWorkers():
    global imgQueue

    while True:
        procs = [Process(target=workerJob, args=(imgQueue,)) for i in range(1)]
        for p in procs:
            p.start()

def flaskThread():
    app.run(host='0.0.0.0', threaded=True)

if __name__ == '__main__':

  # app.run(host='0.0.0.0', threaded=True)
  flaskProcess = Process(target=flaskThread, args=())
  flaskProcess.start()
  workerProcess = Process(target=startWorkers, args=())
  workerProcess.start()
...