我有一个Flask应用程序,它产生一个内部线程,定期向另一台服务器发送数据。
初始化Flask应用程序时,会生成新线程:
sthread = Thread(target=DataPush, args=())
sthread.start()
然后在sthread内:
def DataPush():
while True:
# data contains the POST data
method = "POST"
handler = urllib2.HTTPHandler()
opener = urllib2.build_opener(handler)
request = urllib2.Request(server_url, data=data)
request.add_header("Content-Type",'application/json')
request.get_method = lambda: method
try:
connection = opener.open(request)
except urllib2.HTTPError,e:
connection = e
if connection.code == 200:
ndata = connection.read()
print(ndata)
else:
print('error:' + str(connection.code))
time.sleep(5)
发送被阻止(在build_opener处阻止)显然是由Flask应用程序主线程阻止的。如果我ctrl-C,主烧瓶应用程序线程被杀死,突然数据发送工作(当然现在Flask应用程序在功能上被杀死)。
什么阻止发送?