在以下代码中
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)
。
为什么会这样?
答案 0 :(得分:3)
代码生成线程守护程序线程。
线程可以标记为“守护程序线程”。这个的意义 flag是只有守护进程线程时整个Python程序退出 留下。初始值继承自创建线程。该 可以通过守护进程属性或守护进程构造函数设置flag 参数。
程序可能会在从服务器返回响应之前结束。
使用非守护程序线程,或使用Thread.join
显式等待线程完成启动,而不是使用守护程序线程。
threads = []
for i in range(5):
t = threading.Thread(target=sendPostRequest)
t.start()
threads.append(t)
for t in threads:
t.join()