簡體   English   中英

為什么在這種情況下urllib.request.urlopen會阻塞?

[英]Why is urllib.request.urlopen blocking in this case?

在下面的代碼中

def sendPostRequest():
  request = urllib.request.Request(myURL, myBody, myHeaders)
  print("created POST request", request)
  response = urllib.request.urlopen(request)
  print("finished POST", response)

for i in range(5):
  t = threading.Thread(target=sendPostRequest)
  t.daemon = True  # thread dies when main thread (only non-daemon thread) exits.
  t.start()

,從未達到行print("finished POST", response) ,而我可以在服務器日志中觀察到請求已成功到達。 但是print("created POST request", request)達到了行print("created POST request", request) 為什么會這樣呢?

該代碼使線程守護進程成為線程。

根據threading文檔

線程可以標記為“守護程序線程”。 該標志的重要性在於, 僅保留守護程序線程時整個Python程序都會退出 初始值是從創建線程繼承的。 可以通過daemon屬性或daemon構造函數參數設置該標志。

該程序可能在服務器返回響應之前結束。

可以使用非守護程序線程,也可以使用Thread.join顯式等待線程完成,而不是使用守護程序線程。

threads = []

for i in range(5):
    t = threading.Thread(target=sendPostRequest)
    t.start()
    threads.append(t)

for t in threads:
    t.join()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM