`eventlet.spawn`不能按预期工作

发布于 2021-01-29 17:28:55

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

这是它应该起作用的方式:

用户指定诸如dataset和的参数后learning rate,我创建了一个new task record,然后异步启动该任务的执行程序(该执行程序可能需要很长时间才能运行。),然后将用户重定向到其他页面。

搜索完后async library for python,我从开始eventlet,这是我在flaskview函数中编写的:

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

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

我的代码可能是什么问题?还是我应该尝试其他方法?

关注者
0
被浏览
45
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    您需要修补一些系统库才能使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之类的库所面临的挑战之一是,内置的网络库本身并不支持我们需要的那种协作收益。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看