【问题标题】:Getting response via ajax when calling a python script that contains a loop调用包含循环的python脚本时通过ajax获取响应
【发布时间】:2016-05-04 14:16:51
【问题描述】:

我正在使用 AJAX Post 调用一个 Python 脚本,该脚本包含一个服务器套接字,该套接字在 while True 循环中持续侦听新传入数据。由于循环,脚本永远不会完成,因此我无法使用 success 访问数据,也无法从 AJAX 访问 done 案例。我想使用通过套接字接收到的数据来更新我的 HTML 页面中的元素。

AJAX 代码:

$.ajax({
       url: "../../cgi-bin/python-script",
       data: {iframe: id_iframe}, 
       type: "POST",
       dataType: "text",
       success: function(response){
             console.log(response);
             alert(response);
       },
       error: function(){
             console.log("Error creating socket.");
       }
}).done(function(data){
       console.log(data);
       alert(data);
});

Python 代码:

while True:
        connection, address = serversocket.accept()
        buf = connection.recv(PATH_MAX) 

        data = pickle.loads(buf)

        if data:
            print("\nData received: " + data[0])

【问题讨论】:

    标签: python ajax sockets loops


    【解决方案1】:

    您可以使用 celery 异步运行您的代码,并且您的主线程不会被阻塞。

    【讨论】:

    • 您能详细说明一下吗?我不知道如何处理芹菜。从我在celeryproject.org 快速阅读的内容来看,这似乎是我所需要的。
    • 跟随 [tutorial] (docs.celeryproject.org/en/latest/getting-started/…) 有几个要点:你应该有代理,例如 redis 或 rabbitmq,你应该运行像 celery -A tasks worker --loglevel=info 这样的 celery worker,你应该有你的循环任务.在有人发送请求后,您应该使用 apply_async 调用此任务。
    猜你喜欢
    • 2015-06-27
    • 2014-02-26
    • 2016-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多