我正在为数据分析任务编写一个 Web UI。

这是它应该工作的方式:

在用户指定 datasetlearning rate 等参数后,我创建一个新的 task record ,然后异步启动此任务的执行程序(执行程序可能需要很长时间才能运行。),并且用户被重定向到其他页面。

搜索 async library for python 后,我从 eventlet 开始,这是我在 flask View 函数中编写的内容:

db.save(task)
eventlet.spawn(executor, task)
return redirect("/show_tasks")

使用上面的代码,执行程序根本没有执行。

我的代码可能有什么问题?或者也许我应该尝试其他的东西?

最佳答案

您需要 patch 一些系统库才能使 eventlet 工作。这是一个最小的工作示例(也作为 gist ):

#!/usr/bin/env python

from flask import Flask
import time
import eventlet

eventlet.monkey_patch()

app = Flask(__name__)
app.debug = True

def background():
    """ do something in the background """
    print('[background] working in the background...')
    time.sleep(2)
    print('[background] done.')
    return 42

def callback(gt, *args, **kwargs):
    """ this function is called when results are available """
    result = gt.wait()
    print("[cb] %s" % result)

@app.route('/')
def index():
    greenth = eventlet.spawn(background)
    greenth.link(callback)
    return "Hello World"

if __name__ == '__main__':
    app.run()

更多相关信息:
  • http://eventlet.net/doc/patching.html#monkey-patch

  • 关于python - `eventlet.spawn` 没有按预期工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14180179/

    10-10 21:29