python中loop是什么语句_Python AsyncIO的loop.add_reader()期望什么文件描述符对象?

我正在尝试理解如何在Python 3.4中使用新的AsyncIO功能,我正在努力使用

event_loop.add_reader().从

limited discussions我发现它看起来像是用于读取标准的单独进程反对打开文件的内容.真的吗?如果是这样,似乎没有AsyncIO特定的方式来集成标准文件IO,这也是真的吗?

我一直在玩以下代码.以下输出给出异常PermissionError:[Errno 1]不允许从addpyader()行触发的/python3.4/selectors.py self._epoll.register(key.fd,epoll_events)的第399行操作下面

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()

编辑

对于那些寻找如何使用AsyncIO一次读取多个文件的例子,我很好奇,这里有一个如何实现它的例子.秘密在于来自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 = open(path, 'r')

retVal = []

cnt = 0

while True:

cnt = cnt + 1

data = yield from read_section(fd, 102400)

print(path + ': ' + str(cnt) + ' - ' + str(len(data)))

if len(data) == 0:

break;

fd.close()

paths = ["loadme.txt", "loadme also.txt"]

loop = asyncio.get_event_loop()

tasks = []

for path in paths:

tasks.append(asyncio.async(read_file(path)))

loop.run_until_complete(asyncio.wait(tasks))

loop.close()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值