Как мне дождаться подключения к сокету, не блокируя программу? - PullRequest
0 голосов
/ 25 января 2019

Я использую соединение сокет клиент-сервер для передачи некоторых данных с моего сервера Python. Проблема, с которой я столкнулся на данный момент, заключается в том, что создание сокета сервера блокирует программу, поскольку она не может подключиться к клиенту.

Я пытался использовать async, но мне не удалось

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 голосов
/ 25 января 2019

Вы можете разделить вызов 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")
...