我试图在Windows 7 64位和Python 3.4.3上异步读取stdin
我尝试了这个受到SO回答的启发:
import asyncio
import sys
def reader():
print('Received:', sys.stdin.readline())
loop = asyncio.get_event_loop()
task = loop.add_reader(sys.stdin.fileno(), reader)
loop.run_forever()
loop.close()
Run Code Online (Sandbox Code Playgroud)
然而,它提出了一个OSError: [WInError 100381] An operation was attempted on something that is not a socket.
类似文件的对象是否stdin可以包含在类中以赋予它套接字的API?我已单独提出这个问题,但如果解决方案很简单,请在此处回答.
假设我无法包装类似文件的对象使其成为套接字,我尝试使用流作为这个要点的启发:
import asyncio
import sys
@asyncio.coroutine
def stdio(loop):
reader = asyncio.StreamReader(loop=loop)
reader_protocol = asyncio.StreamReaderProtocol(reader)
yield from loop.connect_read_pipe(lambda: reader_protocol, sys.stdin)
@asyncio.coroutine
def async_input(loop):
reader = yield from stdio(loop)
line = yield from reader.readline()
return …Run Code Online (Sandbox Code Playgroud) 我需要创建一个软件,它同时从 web 套接字和管道接收消息,并在另一个通道上发送消息(它从套接字接收,创建一个新线程并发送到管道。以同样的方式从管道接收,创建一个新线程并发送到套接字)。
我有一个多线程问题,在程序启动时我必须启动方法socket_receiver,pipe_receiver但我只能启动pipe_receiver. 我试图消除所有的代码,并只保留socket_receiver和pipe_receiver,但它只是在进入while True的pipe_receiver。
import asyncio
import sys
import json
from concurrent.futures.thread import ThreadPoolExecutor
import websockets
# make the Pool of workers
executor = ThreadPoolExecutor(max_workers=10)
# Make connection to socket and pipe
header = {"Authorization": r"Basic XXXX="}
connection = websockets.connect('wss://XXXXXXXX', extra_headers=header)
async def socket_receiver():
"""Listening from web socket"""
async with connection as web_socket:
while True:
message = await web_socket.recv()
# send the message to …Run Code Online (Sandbox Code Playgroud)