我正在为数据分析任务编写一个 Web UI。
这是它应该工作的方式:
在用户指定 dataset
和 learning 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()
更多相关信息:
关于python - `eventlet.spawn` 没有按预期工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14180179/