一般来说,我对web应用程序编程还是新手,尤其是flask。我正试图为我不久前写的一些Python代码创建一个“图形化”界面。有人建议我,与其编写图形界面,不如让它成为一个带有烧瓶的web应用程序。我希望它运行的代码可能需要一段时间,我还希望用户能够同时运行多个实例。有人告诉我应该用芹菜来同时使用。在
另一个主要的要求是关于进度的反馈应该给用户。从一开始我不太了解web编程,我做了一些研究,想弄清楚如何在web上实现这一点,并发现服务器发送的事件对我来说是完美的。我想弄清楚如何在烧瓶里做这件事,我找到了http://flask.pocoo.org/snippets/116/,我按照上面描述的那样工作。在学习了芹菜并让位于http://flask.pocoo.org/docs/patterns/celery/的示例正常工作后,我尝试创建一个任务的简单示例,该任务将具有某种状态,该状态会随着时间的推移而更新,并将其反馈给用户。我遇到的问题是我的芹菜任务似乎没有开始。在
然后我发现了一个例子,在一个使用redis的聊天程序中使用了服务器发送的事件,所以我想我会尝试一下,但是我得到了相同的结果。以下是我为实现订阅功能而编写的:
@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")
然后我有一个芹菜任务:
^{pr2}$其中芹菜由make_celery
函数设置。然后我有一个函数:
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'])
当我查看调用celery的shell时,我没有看到任何任务在运行。当我同时使用gevent.队列如SSE烧瓶示例所述。在
我的怀疑是,从芹菜任务到任务外运行的东西之间的通信可能存在问题。有没有从芹菜任务中提取我想要的信息的标准方法?我应该考虑另一种实现并发的方法吗?在
谢谢。在
目前没有回答
相关问题 更多 >
编程相关推荐