0

いくつかのテキスト ファイルを作成する Python スクリプトがあり、それらは現在の Web ホストにアップロードされます。これは 5 分ごとに行われます。テキスト ファイルは、5 分ごとに最新バージョンを取得するソフトウェア プログラムで使用されます。現在、Web ホストで実行していますが、信頼性を向上させるために GAE に移行したいと考えています。(また、現在の Web ホストでは、TOS に従って、単純なファイル ホスティングが許可されていないためです。)

Google App Engine は私に適していますか? Python の使用経験はありますが、Web テクノロジに関連するものはありません。基本的な hello world チュートリアルを実行しましたが、Web サイトとしてはかなり簡単に思えますが、自分のプロジェクトをどのように実装すればよいかわかりません。また、最新のファイルが Google のサーバー間で十分な速さで伝播されない原因となるキャッシュについても心配しています。

4

2 に答える 2

0

はいといいえ。

Appengineは、信頼性、サーバー速度、機能などの点で優れています。ただし、2つの主な欠点があります。サンドボックス環境にあり(ファイルシステムアクセスがなく、データストアを使用する必要があります)、インスタンス時間単位で支払います。通常、たまにアクセスされる小さなサーバーをホストしているだけの場合は、無料のホスティングを利用できます。毎日cronジョブを実行している場合は、常に少なくとも1つのインスタンスを使用する必要があるため、コストがかかります。

グーグルのサーバーでの速度と伝播についてのあなたの懸念は議論の余地があります。彼らはあなたの操作がアトミックであることを保証する彼らのデータセンターを通して脈動するグローバルタイムサーバーを持っています。整合性=STRONGのデータをリクエストした場合、プット後にgetが開始される限り、更新されたデータが表示されます。

于 2013-02-03T06:32:31.687 に答える
0

テキスト ファイルが常に 1 MB 未満であり、多数のユーザーに拡張する予定がない場合、テキスト ファイルを TextProperty としてエンティティにポストするシステムをセットアップするのは非常に簡単です。あなたがGAEの完全な初心者であれば、これを実行するのにおそらく1時間未満です。HTML 作業のテストを高速化するために、これを頻繁に行っています (静的ファイルの展開よりもはるかに優れています)。例として、いくつかの非常に単純なコードの抜粋を示します。(単純化/匿名化するために変更するときに、私がそれを台無しにした場合はお詫びします。) HTH -stevep

#client side python...

import time
import urllib
import httplib


def processUpdate(filename):
    f = open(filename, 'rb')
    parts = filename.split('/')
    name = parts[len(parts)-1]
    print name
    html = f.read()
    f.close()
    htmlToLoad = urllib.quote(html)
    params = urllib.urlencode({'key':'your_arbitrary_password_here(or use admin account)',
                                'name':name,
                                'htmlToLoad':htmlToLoad,
                                })
    headers = {'Content-type': 'application/x-www-form-urlencoded', 'Accept': 'text/plain'}
    #conn = httplib.HTTPConnection('your_localhost_here')
    conn = httplib.HTTPConnection('your_app_id_here')
    conn.request('POST', '/your_on-line_handler_url_stub_here', params, headers)
    response = conn.getresponse()
    print '%s, %s, %s' % (filename, response.status, response.reason)


def main():
    startTime = time.time()
    print '----------Start Process----------\n'
    processUpdate('your_full_file01_path_here')
    processUpdate('your_full_file02_path_here')
    processUpdate('your_full_file03_path_here')
    print '\n----------End Process----------', time.time() - startTime

if __name__ == '__main__':
    main()


# GAE Kind
class Html_Source(db.Model):
    html = db.TextProperty(required=True, indexed=False)
    dateM = db.DateTimeProperty(required=True, indexed=False, auto_now=True)
    v = db.IntegerProperty(required=False, indexed=False, default=1)


#GAE handler classes

EVENTUAL = db.create_config(read_policy=db.EVENTUAL_CONSISTENCY)


class load_test(webapp2.RequestHandler):
    def post(self):
        self.response.clear()
        if (self.request.get('key') != 'your_arbitrary_password_here(or use admin account)'):
            logging.info("----------------------------------bad key")
            return
        name = self.request.get('name')
        rec = Html_Source(
                    key_name = name,
                    html = urllib.unquote(self.request.get('htmlToLoad')),
                    )
        rec.put()
        self.response.out.write('OK=' + name)


class get_test(webapp2.RequestHandler):
    def get(self):
        urlList = self.request.url.split('/')
        name = urlList[len(urlList) - 1]
        extension = name.split('.')
        type = '' if len(extension) < 2 else extension[1]
        typeM = None
        if type == 'js': typeM = 'application/javascript'
        if type == 'css': typeM = 'text/css'
        if type == 'html': typeM = 'text/html'
        self.response.out.clear()
        if typeM: self.response.headers["Content-Type"] = typeM
        logging.info('%s-----name, %s-----typeM' % (name, typeM))
        htmlRec = Html_Source.get_by_key_name(name, config=EVENTUAL)
        if htmlRec is None:
            self.response.out.write('<p>invalid:%s</p>' % (name))
            return
        self.response.out.write(htmlRec.html)
于 2013-02-03T16:26:07.740 に答える