Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 线程结束时发送消息_Python_Multithreading_Selenium_Subprocess_Flask Socketio - Fatal编程技术网

Python 线程结束时发送消息

Python 线程结束时发送消息,python,multithreading,selenium,subprocess,flask-socketio,Python,Multithreading,Selenium,Subprocess,Flask Socketio,我有一个Python flask脚本(使用),它托管一个带有几个按钮的网站。当我单击其中一个按钮时,浏览器会通过socket.io向服务器发送请求。然后,服务器在新线程中启动一个函数。我想在线程完成后向客户端发送一条消息,但我无法让它工作 @socketio.on('login', namespace='/command') def login_account(data): data = json.loads(data) emit('response', {'command':"

我有一个Python flask脚本(使用),它托管一个带有几个按钮的网站。当我单击其中一个按钮时,浏览器会通过socket.io向服务器发送请求。然后,服务器在新线程中启动一个函数。我想在线程完成后向客户端发送一条消息,但我无法让它工作

@socketio.on('login', namespace='/command')
def login_account(data):
    data = json.loads(data)
    emit('response', {'command':"login", 'response': 1})
    login = Thread(target=do_login, args=(data["id"],))
    login.start()
    while login.isAlive() == True:
        time.sleep(2)
    emit('response', {"command":"login", 'title':"Melde  " + data["name"].decode('utf-8') + " an", 'response': data["name"].decode('utf-8') + " erfolgreich angemeldet. Verbinde dich per VNC um mit dem Account zu interagieren."}, namespace='/command')
do_login
使用Selenium Web驱动程序执行一些操作,并在Seleniums显示屏上启动
x11vnc
。在我添加
x11vnc
子流程之前,整个过程都非常顺利:

subprocess.call('x11vnc -display:' + str(display.display) +" 2>/dev/null 1>&2 &", shell=True)
从那时起,我总是在浏览器控制台中获得以下内容:

WebSocket connection to 'ws://somehost:8080/socket.io/?EIO=3&transport=websocket&sid=f1164e481c0f44338b3e952f01830a90' failed: Invalid frame header
在服务器上,我得到:

Client disconnected
84.187.79.227 - - [21/Feb/2016 12:14:26] code 400, message Bad request syntax ('\x88\x9a\xc9\x9aVA\xcap\x01$\xab\xc99"\xa2\xff"a\x99\xe895\xa6\xf99-\xe9\xdf$3\xa6\xe8')
84.187.79.227 - - [21/Feb/2016 12:14:26] "??ɚVA?p$??9"??"a??95??9-??$3??" 400 -
我还尝试使用eventlet.green导入子流程中的
,但没有帮助

我的客户代码是:

command = io.connect('http://' + document.domain + ':' + location.port + "/command");
command.on('response', function(data) {
  var data = JSON.parse(JSON.stringify(data))
  if (data["command"] == "login"){
    if (data["response"] == "1"){
      HoldOn.open({
        theme:"sk-folding-cube"
      });
    }
    else{
      HoldOn.close();
      $('#modal_information_title').text(data["title"]);
      $('#modal_information_body').text(data["response"]);
      $('#modal_information').modal('show');
    }
  }
      });
按钮将调用:

<button type="button" class="btn btn-primary" onclick="command.emit('login', JSON.stringify({'name':'{{item['username']}}', 'id':'{{item['id']}}'}));">Login</button>

你修补过标准库吗?是的,我修补过了。不知道为什么它无论如何都不起作用..你给标准库打过补丁吗?是的,我已经打过补丁了。不知道为什么它不起作用。。
from pyvirtualdisplay.xvnc import XvncDisplay
display = XvncDisplay(rfbport='5900', size=(800, 700))
display.start()