Python 使用asyncio挂起程序
这是我的密码:Python 使用asyncio挂起程序,python,python-3.5,python-asyncio,Python,Python 3.5,Python Asyncio,这是我的密码: import asyncio, socket sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.bind(('', 1234)) sock.setblocking(False) queue = asyncio.Queue() def sock_reader(): print(sock.recv(1024)) # x = yield from queue def test_sock_re
import asyncio, socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind(('', 1234))
sock.setblocking(False)
queue = asyncio.Queue()
def sock_reader():
print(sock.recv(1024))
# x = yield from queue
def test_sock_reader():
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.sendto(b'HELLO', ('127.0.0.1', 1234))
loop = asyncio.get_event_loop()
loop.add_reader(sock, sock_reader)
loop.call_later(0.5, test_sock_reader)
loop.run_forever()
loop.close()
这是输出:
b'HELLO'
当行#x=yield from queue
未注释时,程序不再打印b'Hello'
为什么产生的
会影响本应执行的命令?问题在于语法和API定义的结合
首先,请参阅,它表示需要回调。这个词本身并不明显,但callback的意思是一个正则函数
现在,当您取消注释#x=yield from queue
行时,由于yield from
,您的sock\u reader
函数实际上变成了生成器/协同程序,在这种情况下,当像常规函数一样调用时(即sock\u reader(…)
),它返回一个生成器对象,并且不会执行。我希望sock\u reader
等待队列中有一个项目。怎么做?@DombiSzabolcs看一下