Python 光滑的XMPP和烧瓶承插挂线

Python 光滑的XMPP和烧瓶承插挂线,python,multithreading,flask,flask-socketio,sleekxmpp,Python,Multithreading,Flask,Flask Socketio,Sleekxmpp,我正在尝试创建一个可以从浏览器控制的XMPP客户端。我正在为XMPP客户端使用SleekXMPP,为网站使用flask socketio,这样我就可以将信息从XMPP服务器转发到我的XMPP客户端,再转发到我的网站前端。如果我使用纯flask,我需要轮询我的服务器以获取额外的更新,我更希望服务器推送到我的客户端 我的线程有一些问题。连接到服务器工作正常。但是当我断开连接时,我得到一个错误,显示3个线程无法终止。如何在断开连接时终止这些线程?或者为什么他们没有被杀?或者我应该使用更好的设置吗 谢谢

我正在尝试创建一个可以从浏览器控制的XMPP客户端。我正在为XMPP客户端使用SleekXMPP,为网站使用flask socketio,这样我就可以将信息从XMPP服务器转发到我的XMPP客户端,再转发到我的网站前端。如果我使用纯flask,我需要轮询我的服务器以获取额外的更新,我更希望服务器推送到我的客户端

我的线程有一些问题。连接到服务器工作正常。但是当我断开连接时,我得到一个错误,显示3个线程无法终止。如何在断开连接时终止这些线程?或者为什么他们没有被杀?或者我应该使用更好的设置吗

谢谢

错误:

DEBUG    Event triggered: session_end
DEBUG    Waiting for 3 threads to exit.
DEBUG    Finished exiting event runner thread after early termination from disconnect() call. 3 threads remain.
DEBUG    Finished exiting send thread after early termination from disconnect() call. 3 threads remain.
DEBUG    Quitting Scheduler thread
DEBUG    Finished exiting scheduler thread after early termination from disconnect() call. 3 threads remain.
ERROR    Hanged threads: [<_MainThread(MainThread, started 140735076622336)>, <Thread(read_thread, started 4452692848)>, <Thread(Thread-1, started daemon 4454843728)>]
ERROR    This may be due to calling disconnect() from a non-threaded event handler. Be sure that event handlers that call disconnect() are registered using: add_event_handler(..., threaded=True)
DEBUG    Event triggered: disconnected
DEBUG     ==== TRANSITION connected -> disconnected
还有我的前端

<!DOCTYPE HTML>
<html>
<head>
    <script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.11.3.min.js"></script>
    <script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/socket.io/1.3.6/socket.io.min.js"></script>
    <script type="text/javascript" charset="utf-8">
        var socket

        $(document).ready(function(){
            namespace = '/vibe';
            socket = io.connect('http://' + document.domain + ':' + location.port + namespace);
        });

        function handle_connect(cmd) {
            socket.emit(cmd)
        } 
    </script>
</head>
<body>
    <button type="button" onclick="handle_connect('socket_connect')">Connect</button>
    <button type="button" onclick="handle_connect('socket_disconnect')">Disconnect</button>
</body>

</html>

var插座
$(文档).ready(函数(){
名称空间='/vibe';
socket=io.connect('http://'+document.domain+':'+location.port+命名空间);
});
函数句柄连接(cmd){
socket.emit(cmd)
} 
连接
断开

您获得的日志表明问题所在:
这可能是由于从非线程事件处理程序调用disconnect()造成的。确保调用disconnect()的事件处理程序是使用以下命令注册的:add_event_handler(…,threaded=True)
。似乎您无法从任何代码中自由地停止sleekxmpp,您只能从线程化事件处理程序中进行。可能这就像启动一个单独的线程并从那里运行disconnect一样简单。您得到的日志表明问题所在:
这可能是由于从非线程事件处理程序调用disconnect()造成的。确保调用disconnect()的事件处理程序是使用以下命令注册的:add_event_handler(…,threaded=True)
。似乎您无法从任何代码中自由地停止sleekxmpp,您只能从线程化事件处理程序中进行。也许这就像启动一个单独的线程并从那里断开连接一样简单。
<!DOCTYPE HTML>
<html>
<head>
    <script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.11.3.min.js"></script>
    <script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/socket.io/1.3.6/socket.io.min.js"></script>
    <script type="text/javascript" charset="utf-8">
        var socket

        $(document).ready(function(){
            namespace = '/vibe';
            socket = io.connect('http://' + document.domain + ':' + location.port + namespace);
        });

        function handle_connect(cmd) {
            socket.emit(cmd)
        } 
    </script>
</head>
<body>
    <button type="button" onclick="handle_connect('socket_connect')">Connect</button>
    <button type="button" onclick="handle_connect('socket_disconnect')">Disconnect</button>
</body>

</html>