我可以在一个关于芹菜的网页应用程序中提供一个关于进度的反馈?

2024-09-29 21:47:36 发布

您现在位置:Python中文网/ 问答频道 /正文

一般来说,我对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烧瓶示例所述。在

我的怀疑是,从芹菜任务到任务外运行的东西之间的通信可能存在问题。有没有从芹菜任务中提取我想要的信息的标准方法?我应该考虑另一种实现并发的方法吗?在

谢谢。在


Tags: 函数用户web应用程序flask示例target烧瓶

热门问题