【问题标题】:Why does this Python program using yield from not work?为什么这个使用 yield from 的 Python 程序不起作用?
【发布时间】:2015-07-28 14:04:05
【问题描述】:

我从以下有效的基本代码开始(如http://aaugustin.github.io/websockets/ 的示例代码):

import asyncio
import websockets

@asyncio.coroutine
def servePlayer(websocket, path):
    yield from websocket.send("Hello World")

start_server = websockets.serve(servePlayer, 'localhost', 8765)
asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()

我将其修改为类似但不再有效的东西。我不知道为什么。这是修改后的版本:

import asyncio
import websockets

class Player:
    def __init__(self, connection):
        self.connection = connection
    def send(self, data):
        print("sending")
        yield from self.connection.send(data)

@asyncio.coroutine
def servePlayer(websocket, path):
    player = Player(websocket)
    player.send("Hello World")

start_server = websockets.serve(servePlayer, 'localhost', 8765)
asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()

代码甚至没有到达“发送”行。

【问题讨论】:

    标签: python websocket generator yield-from


    【解决方案1】:

    你的player.send() 方法也是一个生成器;你需要委托给那个生成器:

    @asyncio.coroutine
    def servePlayer(websocket, path):
        player = Player(websocket)
        yield from player.send("Hello World")
    

    【讨论】:

      猜你喜欢
      • 2015-05-21
      • 2022-01-17
      • 2015-08-16
      • 2013-01-26
      • 2016-04-20
      • 2019-12-31
      • 1970-01-01
      • 2018-02-22
      • 2022-01-28
      相关资源
      最近更新 更多