如何在不阻塞程序的情况下等待套接字连接?

时间:2019-01-25 09:49:55

标签: python sockets asynchronous flask server

我使用客户端服务器套接字连接从我的Python服务器传输一些数据。我目前遇到的问题是服务器套接字的创建阻止了该程序,因为它无法连接到客户端。

我尝试使用异步,但没有成功

from flask import *
import random   
import socket
import json  
app = Flask(__name__, static_url_path='')
socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socket.bind(('',55555))

async def acceptConnexion():
    while True:
        socket.listen(10)
        client, address = socket.accept()
        print("{} connected".format( address ))

@app.route('/getInfos')
def getInfos():
    global infosThymio
    return json.dumps(infosThymio)

if __name__ == '__main__':
    app.run()

我不知道在哪里可以调用我的acceptConnexion(),并且不知道如何设法使此方法在后台运行,直到它可以与客户端进行连接为止。

1 个答案:

答案 0 :(得分:0)

您可以通过这种方式将accept调用分离到一个单独的线程,并在边线程等待接受时让主线程继续。

import socket
from threading import Thread

socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socket.bind(('',55555))

def acceptConnexion():
    print("running in thread")
    while True:
        socket.listen(10)
        address = socket.accept()
        print("{} connected".format( address ))    

if __name__ == "__main__":
    thread = Thread(target = acceptConnexion)
    print("you can here do bla bla")
    x = 1
    print("x", x)
    print("Main thread will wait here for thread to exit")
    thread.join()
    print("thread finished...exiting")