Home > Enterprise >  Why is my queue.get() stuck on infinite loop when I try to load for second time?
Why is my queue.get() stuck on infinite loop when I try to load for second time?

Time:10-25

I am trying to run two functions simultaneously, and return from them their outputs. I have written the following code, but it only works to retrieve the output from either q1 or q2 once, but when I try a second time, I get stuck on an infinite loop. I do not understand why.

from threading import Thread
from multiprocessing import Queue
import multiprocessing 
import time

def functionA(A, B):
    dictA=[]
    for i in list(range(A, B)):
        print(i, "from A")
        time.sleep(1)
        for p in list(range(0, 10)):
            dictA.append({i:p})
    return(dictA)

def functionB(C, D):
    dictB=[]
    for i in list(range(C, D)):
        print(i, "from B")
        time.sleep(1)
        for p in list(range(0, 10)):
            dictB.append({i:p})
    return(dictB)

#Create variables from global variables
def wrapper(func, args, queue):
    queue.put(func(*args))

q1, q2 = multiprocessing.Manager().Queue(), multiprocessing.Manager().Queue()

Thread(target=wrapper, args=(functionA, [0, 10], q1)).start()
Thread(target=wrapper, args=(functionB, [10, 20], q2)).start()

First time I try to get q1:

print(q1.get()) (0.9s)
[{0: 0}, {0: 1}, {0: 2}, {0: 3}, {0: 4}, {0: 5}, {0: 6}, {0: 7}, {0: 8}, {0: 9}, {1: 0}, {1: 1}, {1: 2}, {1: 3}, {1: 4}, {1: 5}, {1: 6}, {1: 7}, {1: 8}, {1: 9}, {2: 0}, {2: 1}, {2: 2}, {2: 3}, {2: 4}, {2: 5}, {2: 6}, {2: 7}, {2: 8}, {2: 9}, {3: 0}, {3: 1}, {3: 2}, {3: 3}, {3: 4}, {3: 5}, {3: 6}, {3: 7}, {3: 8}, {3: 9}, {4: 0}, {4: 1}, {4: 2}, {4: 3}, {4: 4}, {4: 5}, {4: 6}, {4: 7}, {4: 8}, {4: 9}, {5: 0}, {5: 1}, {5: 2}, {5: 3}, {5: 4}, {5: 5}, {5: 6}, {5: 7}, {5: 8}, {5: 9}, {6: 0}, {6: 1}, {6: 2}, {6: 3}, {6: 4}, {6: 5}, {6: 6}, {6: 7}, {6: 8}, {6: 9}, {7: 0}, {7: 1}, {7: 2}, {7: 3}, {7: 4}, {7: 5}, {7: 6}, {7: 7}, {7: 8}, {7: 9}, {8: 0}, {8: 1}, {8: 2}, {8: 3}, {8: 4}, {8: 5}, {8: 6}, {8: 7}, {8: 8}, {8: 9}, {9: 0}, {9: 1}, {9: 2}, {9: 3}, {9: 4}, {9: 5}, {9: 6}, {9: 7}, {9: 8}, {9: 9}]

Second time I try to get q1 its stuck on infinite loop:

print(q1.get())
.......

CodePudding user response:

You created 2 queues q1 and q2, and according to what you said you only do q1.get() and you try to do is twice while what you need to do is:

print(q1.get())
print(q2.get())

Or you can use 1 queue and then you can do q1.get() twice.

  • Related