Python瓶中的自我调用

时间:2014-06-29 18:12:05

标签: python http bottle

使用Python的bottle模块,我想在内部处理请求,而不需要从外部调用来电。

假设我在localhost:8080运行了以下最小瓶子应用程序,并且我想从foo内部调用bar。一种方法是:

from bottle import *
import requests

@get('/foo')
def foo()
    return 'foo'

@get('/bar')
def bar()
    return requests.get('http://localhost:8080/foo').text

app = default_app()
run(app, port=8080)

现在我想做的是使用requests摆脱HTTP调用。我只想喜欢使用类似的东西:

@get('/bar')
def bar()
    return bottle.process_internally('/foo', 'GET')

对我而言,这将有两大优势:

  1. 只需要单个工作程序(处理请求时工作程序被阻止,因此如果只有一个工作程序正在运行,则使用requests.get会导致死锁)。
  2. 没有HTTP协议引起的开销。
  3. 我的真正动机是希望以JSON数组的形式处理包含请求URL的批处理。非常无效,但却很快实施。

    这有可能吗?

1 个答案:

答案 0 :(得分:1)

你可能想要考虑“瘦控制器”(和瘦一切)范例。

有了这个概念,你的所有代码逻辑都在控制器以外的其他地方(可能在你的服务或模型类中)。

如果您的控制器中只有极少量的逻辑,那么您的foobar路由可以在您的模型/服务中调用相同的功能,您无需诉诸你的路线相互呼唤。

有一些框架支持内部重定向(Ruby的Sinatra就是其中之一),但我一直认为这些是一种黑客的解决方法,因为它不能以灵活的方式编写代码。