我嘗試使用以下代碼構建一個基本的 http 服務器。
async def handle_client(client, address):
print('connection start')
data = await loop.sock_recv(client, 1024)
resp = b'HTTP/1.1 404 NOT FOUND\r\n\r\n<h1>404 NOT FOUND</h1>'
await loop.sock_sendall(client, resp)
client.close()
async def run_server():
while True:
client, address = await loop.sock_accept(server)
print('start')
loop.create_task(handle_client(client,address))
print(client)
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('localhost', 3006))
server.listen(8)
print(1)
loop = asyncio.get_event_loop()
loop.run_until_complete(run_server())
我期望得到的輸出是
1
start
connection start
但是實際運行的結果是
1
start
start
start
似乎 loop.create_task() 中的函式沒有運行,所以現在我很困惑。使用 loop.create_task() 的正確方法是什么?
uj5u.com熱心網友回復:
您需要等待通過創建的任務loop.create_task(),否則run_server()將安排任務然后在回傳結果之前退出。
嘗試更改run_server()為以下內容:
async def run_server():
while True:
client, address = await loop.sock_accept(server)
print('start')
await loop.create_task(handle_client(client,address))
print(client)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/421972.html
標籤:
上一篇:如何使用div內的內容定位div
