我正在嘗試使用 UDP 連接創建網路專案。我正在創建的服務器必須是多執行緒的,以便能夠從多個客戶端接收多個命令。但是,當嘗試對服務器進行多執行緒處理時,只有一個執行緒正在運行。這是代碼:
def action_assigner():
print('Hello Assign')
while True:
if work_queue.qsize() != 0:
data, client_address, request_number = work_queue.get()
do_actions(data, client_address, request_number)
def task_putter():
request_number = 0
print('Hello Task')
while True:
data_received = server_socket.recvfrom(1024)
request_number = 1
taskRunner(data_received, request_number)
try:
thread_task = threading.Thread(target=task_putter())
action_thread = threading.Thread(target=action_assigner())
action_thread.start()
thread_task.start()
action_thread.join()
thread_task.join()
except Exception as e:
server_socket.close()
運行代碼時,我只得到Hello Task結果意味著 action_thread從未開始。有人可以解釋如何解決這個問題嗎?
uj5u.com熱心網友回復:
這里的問題是您在創建執行緒本身時呼叫的函式應該是每個執行緒的“主體”。執行該行后,thread_task = threading.Thread(target=task_putter())Python 將首先決議括號內的運算式 - 它呼叫函式task_putter,該函式永遠不會回傳。程式中的任何后續行都不會運行。
在創建執行緒和其他將可呼叫物件作為引數的呼叫時,我們所做的是傳遞函式本身,而不是呼叫它(它將運行函式并計算其回傳值)。
只需更改創建執行緒的兩行,不要將呼叫括號放在target=引數上,您將通過這一點:
...
try:
thread_task = threading.Thread(target=task_putter)
action_thread = threading.Thread(target=action_assigner)
...
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/371835.html
