扭曲,只处理最新的请求,同时终止以前的请求
Twisted, only process latest request while terminating previous ones
我正在尝试设置一个扭曲的项目,该项目 运行 是一个终端命令并在完成时 returns 输出。但是,例如,当客户端在端口 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
但是我在打印输出时得到了一个延迟对象。该脚本可能需要一些时间才能完成,但它似乎并没有像它应该的那样等待。
output = _query('script.sh')
print output
因为 _query
returns a Deferred
,这不是你想要的。您需要 运行 脚本的输出,该脚本作为 Deferred
的结果可用。 Deferred
的目的是在结果可用时让您的代码可用。为此,您将回调附加到 Deferred
。您的代码前面有一个这样的示例:
def _parse(output):
return output
d.addCallback(_parse)
但是这个回调不会做任何事情(也就是说,你可以删除这三行而不改变程序的行为)。
相反,您要做的是附加一个以某种方式处理脚本输出的回调。由于您将 flask
标签附加到问题上,我想您有一个 flask 网络服务器,并且您希望在收到请求时将此代码 运行 ,然后在对该请求的响应中生成脚本输出.
Flask 采用阻塞范式,通过多线程或多处理实现并发。在此上下文中使用 Twisted 来执行您想要的操作将具有一定的挑战性。这是可能的(例如,使用 Crochet),但尚不清楚它是否特别有益。
您可能需要考虑用 Klein 替换 Flask 或用一些标准的阻塞库调用替换 Twisted。
我正在尝试设置一个扭曲的项目,该项目 运行 是一个终端命令并在完成时 returns 输出。但是,例如,当客户端在端口 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
但是我在打印输出时得到了一个延迟对象。该脚本可能需要一些时间才能完成,但它似乎并没有像它应该的那样等待。
output = _query('script.sh')
print output
因为 _query
returns a Deferred
,这不是你想要的。您需要 运行 脚本的输出,该脚本作为 Deferred
的结果可用。 Deferred
的目的是在结果可用时让您的代码可用。为此,您将回调附加到 Deferred
。您的代码前面有一个这样的示例:
def _parse(output):
return output
d.addCallback(_parse)
但是这个回调不会做任何事情(也就是说,你可以删除这三行而不改变程序的行为)。
相反,您要做的是附加一个以某种方式处理脚本输出的回调。由于您将 flask
标签附加到问题上,我想您有一个 flask 网络服务器,并且您希望在收到请求时将此代码 运行 ,然后在对该请求的响应中生成脚本输出.
Flask 采用阻塞范式,通过多线程或多处理实现并发。在此上下文中使用 Twisted 来执行您想要的操作将具有一定的挑战性。这是可能的(例如,使用 Crochet),但尚不清楚它是否特别有益。
您可能需要考虑用 Klein 替换 Flask 或用一些标准的阻塞库调用替换 Twisted。