【问题标题】:python flask socket send call never returnspython烧瓶套接字发送调用永远不会返回
【发布时间】:2015-04-07 00:53:03
【问题描述】:

我编写了一个烧瓶视图函数,它通过套接字向本地服务发送查询,然后处理数据并在渲染后返回。

@app.route('/_search', methods=["GET", "POST"])
@app.route('/_search/', methods=["GET", "POST"])
def searchQuery():

    # get the argument that were passed using get
    t_query = request.args.get('query')

    print(t_query)

    t_s = get_searchserver_socket()
    t_s.send("C, something")

    t_data = t_s.recv(1024)
    print(t_data)
    return t_data

    #abort(404)

我只是使用烧瓶中的全局变量来保存套接字,因此它不会每次都重新创建它:

def get_searchserver_socket():
    t_socket = getattr(g, '_socket', None)
    if t_socket is None:
        t_socket = g._socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        t_socket.connect((search_server_ip, search_server_port))
    return t_socket

问题在于,在视图函数中,套接字发送调用 (t_s.send) 卡住了,实际上从不发送数据。这是为什么呢?

谢谢

【问题讨论】:

    标签: python sockets flask


    【解决方案1】:

    flask.g 仅适用于当前请求。它存在于应用程序上下文中,您可以在此处阅读更多信息:http://flask.pocoo.org/docs/0.10/appcontext/

    您仍将每次都重新创建此套接字。如果您希望它保持持久性,则必须在 Flask 应用程序上下文之外(在您的 Flask 应用程序之外)创建套接字,然后从那里使用它。

    【讨论】:

    • 感谢您指出这一点。我的问题与套接字发送有关。
    • 是的,不确定套接字是怎么回事。我们将不得不进行一些调试。您是否尝试过连接到 Flask 外部的套接字?只是用相同的代码编写一个小的 Python 脚本?
    • 非常成功——我试过了,但也没有用——直到我在字符串末尾添加了换行符。谢谢瑞恩。
    猜你喜欢
    • 1970-01-01
    • 2011-10-10
    • 1970-01-01
    • 2011-05-18
    • 2017-04-15
    • 2017-12-06
    • 2017-07-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多