相关疑难解决方法(0)

epoll常规文件

可以epoll(在Linux上)对常规文件有用吗?我知道它主要用于插座,但只是奇怪.

c c++ sockets linux epoll

23
推荐指数
2
解决办法
6490
查看次数

Python AsyncIO的loop.add_reader()期望什么文件描述符对象?

我试图了解如何在Python 3.4中使用新的AsyncIO功能,我正在努力使用event_loop.add_reader().从我发现的有限讨论看起来它看起来像是从单独的进程中读取标准而不是打开文件的内容.真的吗?如果是这样,似乎没有AsyncIO特定的方式来集成标准文件IO,这也是真的吗?

我一直在玩以下代码.以下输出给出了PermissionError: [Errno 1] Operation not permitted/python3.4/selectors.py第399行的异常self._epoll.register(key.fd, epoll_events),它由add_reader()下面的行触发

import asyncio
import urllib.parse
import sys
import pdb
import os

def fileCallback(*args):
    pdb.set_trace()

path = sys.argv[1]
loop = asyncio.get_event_loop()
#fd = os.open(path, os.O_RDONLY)
fd = open(path, 'r')
#data = fd.read()
#print(data)
#fd.close()
pdb.set_trace()
task = loop.add_reader(fd, fileCallback, fd)
loop.run_until_complete(task)
loop.close()
Run Code Online (Sandbox Code Playgroud)

编辑

对于那些寻找如何使用AsyncIO一次读取多个文件的例子,我很好奇,这里有一个如何实现它的例子.秘密就在于此yield from asyncio.sleep(0).这实际上暂停了当前函数,将其放回事件循环队列中,在执行所有其他就绪函数后调用.确定功能是根据它们的安排方式准备好的.

import asyncio

@asyncio.coroutine
def read_section(file, length):
    yield from asyncio.sleep(0)
    return file.read(length)

@asyncio.coroutine
def read_file(path):
    fd …
Run Code Online (Sandbox Code Playgroud)

python file-io python-3.4 python-asyncio

7
推荐指数
1
解决办法
4782
查看次数

标签 统计

c ×1

c++ ×1

epoll ×1

file-io ×1

linux ×1

python ×1

python-3.4 ×1

python-asyncio ×1

sockets ×1