在下面的代码中
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)
但是,已达到该行。为什么会这样呢?
该代码使线程守护程序线程成为线程。
根据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()
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句