我有一个基本的烧瓶应用程序,其中一个路由调用一个新线程并返回如下:
@app.route("/beginDelivery", methods=["POST"])
def begin_delivery():
if request.get_json(force=True):
js = request.json
else:
return jsonify(status=wrong_json())
pid = js['pid']
Thread(target=asynchronously_deliver, args=[pid]).start()
return jsonify(status=0)
现在,在我的asynchronously_deliver
函数中,有一个调用send_sms
函数的循环。 send_sms
没有任何循环,它的结尾如下:
#....
#....
print("sending sms...")
rb = urllib.request.urlopen("someurl").read()
rsp = str(rb.decode('utf-8'))
if rsp[0] == '0' and rsp[1] == '0' and rsp[2] == '0' and rsp[3] == '0':
provider_id = rsp[7:]
print("provider: success")
else:
provider_id = '0'
print("provider: error")
return provider_id
现在,问题是,当我检查控制台时,有时候,而不是
sending sms...
127.0.0.1 - - [19/May/2016 10:16:54] "GET /someurl HTTP/1.1" 200 -
provider: success
我得到了
sending sms...
provider: success
127.0.0.1 - - [19/May/2016 10:16:56] "GET /someurl HTTP/1.1" 200 -
由于某种原因,在send_sms
print
中执行urllib.request.urlopen("someurl").read()
之前的sleep(10)
的意思。
可能是什么原因?
修改
我在/someurl
路线中添加了sending sms...
,provider: success
和127.0.0.1 - - [19/May/2016 11:32:06] "GET /someurl
之间有10秒的延迟。虽然,考虑一下:
provider:success
直到10秒后才打印,就在rb = urllib.request.urlopen("someurl").read()
之前,因此,在请求完成并返回响应之前,flask不会将消息发送到控制台。此外,这意味着(我认为)pivot
不异步调用。我错了吗?