扭曲,仅处理最新请求,同时终止先前的请求

时间:2018-02-04 20:55:27

标签: python twisted

我试图设置一个运行终端命令并在完成时返回输出的扭曲项目。但是,当客户端在端口9000上启动请求时,twisted会阻止该端口上的所有其他请求,并在初始请求完成后处理它们。

是否可以使用twisted来终止所有先前的请求并仅运行最新的请求?

编辑:

我尝试过以下方法: `

def _query(script):
    d = utils.getProcessOutput('/bin/sh', script)
    def _parse(output):
        return output
    d.addCallback(_parse)
    return d

output = _query('script.sh')
print output

但是我只是在打印输出时得到一个延迟对象。脚本可能需要一些时间才能完成,但它似乎没有等待它应该的时间。

1 个答案:

答案 0 :(得分:1)

output = _query('script.sh')
print output

由于_query返回Deferred,因此无法执行您想要的操作。您需要运行脚本的输出,该输出可用作Deferred的结果。 Deferred的目的是在您的代码可用时将结果提供给 。为此,您需要将回调附加到Deferred。您的代码中有一个早期示例:

def _parse(output):
    return output
d.addCallback(_parse)

但是这个回调没有做任何事情(也就是说,你可以删除这三行而不改变程序的行为)。

相反,您要做的是附加一个以某种方式处理脚本输出的回调。由于您将flask标记附加到问题中,我认为您有一个烧瓶Web服务器,并且您希望在收到请求时运行此代码,然后在对该请求的响应中生成脚本输出。

Flask采用阻塞范式,通过多线程或多处理实现并发。在这种情况下使用Twisted来做你想做的事情将是一个中等挑战。这是可能的(例如,使用Crochet),但不清楚它是否特别有用。

您可能需要考虑将Flask替换为Klein或将Twisted替换为一些标准的阻塞库调用。