将非阻塞读取的结果存储到列表中

Storing the results of non-blocking reading into a list

这是我之前post的修改。基于这个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'])

其实我想把阅读结果存入一个列表,而不是在return d.addCallback(print)中使用print。我尝试了以下方法:

def main(reactor, filename):
    d = getFile(filename)
    X = []
    return d.addCallback(X)

不过好像不太对。如何将阅读结果存储到列表中?

由于 X[],您要添加一个空列表作为回调。但是,空列表不可调用,因此不能用作回调。

相反,您需要 X.append 之类的东西。 X.append 是可调用的(并且有一个参数)。所以它做了一个很好的回调。

return d.addCallback(X.append)

但是,X.append returns None 所以 d 的结果在 X.append 有 运行 之后变成了 NoneX 然后您的示例中的任何代码都无法访问,因此这可能不是最有用的事情。