まず、Google App Engine Pipline APIって何?って思う方もいるだろう。
簡単に説明するとカスケード上に処理をつなぎ合わせる事が出来て、
並列処理を行うこともできるフレームワークだ。
下記のように簡単なサンプルを実行してみるとよい。
import unittest
import pipeline
class DivideWithRemainder(pipeline.Pipeline):
output_names = ['remainder']
def run(self, dividend, divisor):
self.fill(self.outputs.remainder, dividend % divisor)
return dividend // divisor
class EuclidGCD(pipeline.Pipeline):
output_names = ['gcd']
def run(self, a, b):
a, b = max(a, b), min(a, b)
if b == 0:
self.fill(self.outputs.gcd, a)
return
result = yield DivideWithRemainder(a, b)
recurse = yield EuclidGCD(b, result.remainder)
class GCDTest(unittest.TestCase):
def setUp(self):
"""Initialize temporary application variable."""
unittest.TestCase.setUp(self)
pipeline.testutil.setup_for_testing()
def testGCD(self):
"""Test for GCD Pipeline"""
stage = EuclidGCD(1071, 462)
stage.start_test()
self.assertEqual(21, stage.outputs.gcd.value)
if __name__ == "__main__":
unittest.main()
- Run&Result
.
----------------------------------------------------------------------
Ran 1 test in 0.276s
OK
このフレームワークは主に並列処理に有用だが、非同期オペレーションも
サポートされており、例えば、ユーザーのオペレーションも絡めたジョブを
非同期で行う事もできる。
また、このフレームワークを応用して作られたのが、
Google App Enigine Mapreduceである。また、自分のプロジェクトlakshmiクローラもこのフレームワークを利用している。
Comments
Add Comment