Python 如何在Flask中创建一个web应用程序,向用户提供芹菜任务进度的反馈?

Python 如何在Flask中创建一个web应用程序,向用户提供芹菜任务进度的反馈?,python,flask,celery,server-sent-events,Python,Flask,Celery,Server Sent Events,我对web应用程序编程一般来说是新手,尤其是flask。我正在尝试为我刚才编写的一些Python代码创建一个“图形”界面。有人向我建议,与其编写图形界面,不如让它成为一个带有flask的web应用程序。我希望它运行的代码可能需要一段时间,我还希望用户能够同时运行多个实例。有人告诉我应该用芹菜来同时吃 另一个主要要求是向用户提供进度反馈。我从一开始就不太了解网络编程,我做了一些研究,想弄清楚如何在网络上实现这一点,并发现服务器发送的事件对我来说是完美的。试图弄明白如何在烧瓶里做这件事,我发现我得到

我对web应用程序编程一般来说是新手,尤其是flask。我正在尝试为我刚才编写的一些Python代码创建一个“图形”界面。有人向我建议,与其编写图形界面,不如让它成为一个带有flask的web应用程序。我希望它运行的代码可能需要一段时间,我还希望用户能够同时运行多个实例。有人告诉我应该用芹菜来同时吃

另一个主要要求是向用户提供进度反馈。我从一开始就不太了解网络编程,我做了一些研究,想弄清楚如何在网络上实现这一点,并发现服务器发送的事件对我来说是完美的。试图弄明白如何在烧瓶里做这件事,我发现我得到了工作描述。在学习了芹菜并开始使用该示例之后,我尝试创建一个简单的任务示例,该任务具有某种状态,该状态会随着时间的推移而更新并反馈给用户。我遇到的问题是我的芹菜任务似乎没有开始

然后我发现了一个例子,在一个使用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")
然后我有一个芹菜任务:

@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(如示例中所述)时,就会发生这种情况

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