`eventlet.spawn`不能按预期工作
我正在为数据分析任务编写一个Web UI。
这是它应该起作用的方式:
用户指定诸如dataset
和的参数后learning rate
,我创建了一个new task
record
,然后异步启动该任务的执行程序(该执行程序可能需要很长时间才能运行。),然后将用户重定向到其他页面。
搜索完后async library for python
,我从开始eventlet
,这是我在flask
view函数中编写的:
db.save(task)
eventlet.spawn(executor, task)
return redirect("/show_tasks")
使用上面的代码,执行程序根本没有执行。
我的代码可能是什么问题?还是我应该尝试其他方法?
-
您需要修补一些系统库才能使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()
更多信息:
编写Eventlet之类的库所面临的挑战之一是,内置的网络库本身并不支持我们需要的那种协作收益。