在应用程序间共享对象

时间:2013-07-02 14:30:08

标签: python google-app-engine google-cloud-datastore

我正在尝试在两个GAE应用之间共享一个对象。第一个将具有类的文件,并将提供该对象的实例。第二个,使用给定的URL,将访问第一个应用程序,获取对象,然后使用是。这有可能吗?如果是这样,我在下面的代码中做得不好?

作为一个小旁注,我尝试了一个带有pickle的解决方案,但是这两个应用程序都需要在其名称空间中使用该类,但我将使用其中的一些。我想通过使用继承来尝试模仿Java的抽象类,但这没有用。如果你想看到它,我也可以提供该代码。

  • 我理解可能的服务条款,这不是问题。

  • 我知道云计算在那里,我不知道如何使用它,我愿意 我更愿意避免成本,因为我正在将其作为一个类项目开发。

  • 我已经看到了一些使用remote_api的建议,但我没有看到好的例子 它是如何使用的,更不用说允许两个应用程序进行交互了。

  • 我已经看到了使用多个版本的解决方案,但每个学生都会有 一个应用程序,它将是非常混乱,但可能是可行的。

First.Py:

class SampleCritter():
    def move():
        ...
class Access(webapp2.RequestHandler):
    def post(self):
        CritStore(stats=self.request.body).put()

    def get(self):
        creature = CritStore.all().order('-date').get()
        if creature:
            stats = loads(creature.stats)
            return SampleCritter(stats)
        else:
            return SampleCritter() 

Second.py:

class Out(webapp2.RequestHandler):

    def post(self):
        url = self.request.POST['url']
        critter = urllib2.urlopen(url)
        critter.move()

1 个答案:

答案 0 :(得分:1)

简短的回答是,您无法在应用之间共享对象。

答案越长,您的第一个应用就可以使用基于HTTP的API公开对象。任何客户端都可以访问HTTP API,包括app 2。

App 2必须通过HTTP API操纵对象。您将无法从应用2中调用critter.move(),但如果您创建了一个处理程序,例如critter\move,则可以让处理程序启动相应的Critter实例并在其上调用move()。您还必须通过HTTP POST传递所有相应的参数。