相关疑难解决方法(0)

aysncio无法在Windows上读取stdin

我试图在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)

python windows stdin asynchronous python-3.x

13
推荐指数
1
解决办法
2789
查看次数

使用 asyncio 创建两个并发异步任务

我需要创建一个软件,它同时从 web 套接字和管道接收消息,并在另一个通道上发送消息(它从套接字接收,创建一个新线程并发送到管道。以同样的方式从管道接收,创建一个新线程并发送到套接字)。

我有一个多线程问题,在程序启动时我必须启动方法socket_receiverpipe_receiver但我只能启动pipe_receiver. 我试图消除所有的代码,并只保留socket_receiverpipe_receiver,但它只是在进入while Truepipe_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)

python multithreading websocket python-3.x python-asyncio

2
推荐指数
1
解决办法
2210
查看次数