使用烧瓶和应用程序-插座.io图书馆。我遇到的问题是,由于某些上下文问题,以下代码无法正确执行emit
RuntimeError: working outside of request context
我现在只为整个程序编写一个python文件。这是我的代码(测试.py):
^{pr2}$在StackExchange,我读过一些解决方案,但都没用。我不知道我做错了什么。在
我尝试在我的emit
之前添加with app.app_context():
:
def someotherfunction():
# some other tasks
with app.app_context():
emit('anEvent', jsondata, namespace='/test') # same error here
我尝试过的另一个解决方案是在someotherfunction()
之前添加装饰器copy_current_request_context
,但它说装饰器必须在本地范围内。我把它放在someotherfunction()
内,第一行,但是同样的错误。在
如果有人能帮我,我会很高兴的。提前谢谢。在
您的错误是“在请求上下文之外工作”。您试图通过推送应用程序上下文来解决它。相反,您应该推送请求上下文。请参阅http://kronosapiens.github.io/blog/2014/08/14/understanding-contexts-in-flask.html上关于烧瓶中上下文的说明
somefunction()中的代码可能使用请求上下文中全局的对象(如果我不得不猜测您可能使用的是request对象)。当代码不在新线程中执行时,它可能会正常工作。但是当你在一个新的线程中执行它时,你的函数就不再在原来的请求上下文中执行了,它也不再能够访问特定于请求上下文的对象。所以你必须手动推动它。在
所以你的功能应该是
您在这里使用了错误的
emit
。必须使用所创建的socketio对象的emit。所以不是emit('anEvent', jsondata, namespace='/test') # here occurs the error
使用:socketio.emit('anEvent', jsondata, namespace='/test') # here occurs the error
相关问题 更多 >
编程相关推荐