这是对我之前帖子的修改。基于此answer,我将以下内容用于非阻塞读写方法(使用Python 2.7):
from __future__ import print_function
from twisted.internet.task import react
from twisted.internet.defer import Deferred
from twisted.internet.fdesc import readFromFD, setNonBlocking
def getFile(filename):
with open(filename) as f:
d = Deferred()
fd = f.fileno()
setNonBlocking(fd)
readFromFD(fd, d.callback)
return d
def main(reactor, filename):
d = getFile(filename)
return d.addCallback(print)
react(main, ['/Users/USER1/Desktop/testfile.txt'])
事实上,我想将阅读结果存储到列表中,而不是在print
中使用return d.addCallback(print)
。我尝试了以下方法:
def main(reactor, filename):
d = getFile(filename)
X = []
return d.addCallback(X)
但似乎不正确。如何将阅读结果存储到列表中?
答案 0 :(得分:0)
由于X
为[]
,您将添加一个空列表作为回调。但是,空列表不可调用,因此无法用作回调。
相反,你想要像X.append
这样的东西。 X.append
是可调用的(并且带有一个参数)。所以它可以回复。
return d.addCallback(X.append)
但是,X.append
会返回None
,因此在d
运行后,None
的结果会变为X.append
。然后,您的示例中的任何代码都无法访问X
,因此这可能不是最有用的事情。