为什么Flask应用程序主线程阻止另一个线程发送数据?

时间:2017-07-05 20:22:03

标签: python flask urllib2

我有一个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应用程序在功能上被杀死)。

什么阻止发送?

0 个答案:

没有答案