我正在嘗試同時運行兩個函式,并從它們回傳它們的輸出。我已經撰寫了以下代碼,但它只能從 q1 或 q2一次檢索輸出,但是當我第二次嘗試時,我陷入了無限回圈。我不懂為什么。
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()
我第一次嘗試獲得 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}]
我第二次嘗試讓 q1 陷入無限回圈:
print(q1.get())
.......
uj5u.com熱心網友回復:
您創建了 2 個佇列q1,q2并且根據您所說的,您只做q1.get()并且您嘗試做的是兩次,而您需要做的是:
print(q1.get())
print(q2.get())
或者你可以使用 1 個佇列,然后你可以做q1.get()兩次。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/520368.html
