Python 如何在Flask中创建一个web应用程序,向用户提供芹菜任务进度的反馈?
我对web应用程序编程一般来说是新手,尤其是flask。我正在尝试为我刚才编写的一些Python代码创建一个“图形”界面。有人向我建议,与其编写图形界面,不如让它成为一个带有flask的web应用程序。我希望它运行的代码可能需要一段时间,我还希望用户能够同时运行多个实例。有人告诉我应该用芹菜来同时吃 另一个主要要求是向用户提供进度反馈。我从一开始就不太了解网络编程,我做了一些研究,想弄清楚如何在网络上实现这一点,并发现服务器发送的事件对我来说是完美的。试图弄明白如何在烧瓶里做这件事,我发现我得到了工作描述。在学习了芹菜并开始使用该示例之后,我尝试创建一个简单的任务示例,该任务具有某种状态,该状态会随着时间的推移而更新并反馈给用户。我遇到的问题是我的芹菜任务似乎没有开始 然后我发现了一个例子,在一个使用redis的聊天程序中使用了服务器发送的事件,所以我想我会尝试一下,但我得到了相同的结果。下面是我为实现订阅功能而编写的内容:Python 如何在Flask中创建一个web应用程序,向用户提供芹菜任务进度的反馈?,python,flask,celery,server-sent-events,Python,Flask,Celery,Server Sent Events,我对web应用程序编程一般来说是新手,尤其是flask。我正在尝试为我刚才编写的一些Python代码创建一个“图形”界面。有人向我建议,与其编写图形界面,不如让它成为一个带有flask的web应用程序。我希望它运行的代码可能需要一段时间,我还希望用户能够同时运行多个实例。有人告诉我应该用芹菜来同时吃 另一个主要要求是向用户提供进度反馈。我从一开始就不太了解网络编程,我做了一些研究,想弄清楚如何在网络上实现这一点,并发现服务器发送的事件对我来说是完美的。试图弄明白如何在烧瓶里做这件事,我发现我得到
@flask_app.route("/subscribe", methods=['GET'])
def subscribe():
targetname = request.args['target']
print 'The subscribe function was called with target: ' + targetname
return Response(buildSubscription(targetname), mimetype="text/event-stream")
然后我有一个芹菜任务:
@celery.task()
def testPrint(printfunc,initvalue):
print "In testPrint"
x=hashlib.md5(initvalue)
i=0
while True:
time.sleep(5)
printfunc(x.hexdigest())
x.update(str(i))
i+=1
其中芹菜由make_芹菜
功能设置。然后我有一个函数:
def ssePrint(mystring,sub):
print "In ssePrint"
red.pubsub(sub,mystring)
def appPrint(subscription):
sub = subscription
def myprint(myinput):
ssePrint(myinput, sub)
return myprint
以及该函数的包装器:
def ssePrint(mystring,sub):
print "In ssePrint"
red.pubsub(sub,mystring)
def appPrint(subscription):
sub = subscription
def myprint(myinput):
ssePrint(myinput, sub)
return myprint
然后叫进来
@flask_app.route('/start', methods=['POST'])
def start():
myobject = request.get_json()
testPrint.delay(appPrint(myobject['target']), myobject['target'])
然后,当我查看调用芹菜的shell时,我没有看到任何正在运行的任务。当我还使用gevent.Queue(如示例中所述)时,就会发生这种情况
我的怀疑是,从芹菜任务到任务之外运行的东西之间的通信可能存在问题。有没有一种标准的方法可以从芹菜任务中提取我想要的信息?我应该考虑另一种并发方式吗?
谢谢