[英]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.