Google App Engine for Python 4アプ目

このエントリーをはてなブックマークに追加
952nobodyさん:2013/01/12(土) 23:30:55.34 ID:???
あえて抜けしてるんだろうけど
無料枠があるのも魅力の一つ
953nobodyさん:2013/01/13(日) 01:16:59.55 ID:Y3d4fqdG
2012年のGoogle IOで
versionごとにサーバーの設定ができるようにしたいって言ってたけど、
あれから進展あんのかな?
954nobodyさん:2013/01/13(日) 10:43:29.83 ID:???
GoogleAppsも新規無料枠無くなったしな
GAEがそうなるのも時間の問題
955nobodyさん:2013/01/13(日) 18:40:56.36 ID:???
涙拭けよAWS厨
956nobodyさん:2013/01/17(木) 12:48:33.46 ID:???
誰かスレッドセーフについて教えてください

2.7以降に単一のインスタンスがスレッドを捌けるようになった
その恩恵を受けるにはapp.yamlにthreadsafe: trueを指定
そしてthreadingモジュールも使えるようになったので
それを使ってスレッドを制御しなさい

こんな認識でいるんですがGAEから本格的なプログラミング始めたばかりで
スレッドセーフとは何なのかはっきりつかめていません
例えばwebappとdbを使って一般的なアプリケーションを書くとして
どういう箇所が非スレッドセーフになりうるんでしょうか

ぼんやりした理解としてはmutableなオブジェクトが
グローバルやクラスに存在すると駄目?程度です
ヒントだけでも構いませんのでお願いします
957nobodyさん:2013/01/17(木) 13:29:53.64 ID:EsHQfGhD
俺も知りたい
958nobodyさん:2013/01/17(木) 15:00:14.80 ID:???
え、マルチスレッドって自動対応じゃないの?
threadsafeじゃないとどうなんの?
959nobodyさん:2013/01/17(木) 16:10:33.90 ID:???
1インスタンスで1つのリクエストしか同時に処理できない
960nobodyさん:2013/01/17(木) 16:25:44.44 ID:???
意識したことないけど俺も知っときたい
運用はまだ2.5でやってるから関係ないけど
961nobodyさん:2013/01/17(木) 16:40:43.53 ID:???
君たちフレームワークは何つかってるの?

Django?
webapp2?
Kay Framework?
Flask?

どれがオススメかな
Flaskが良さげなんだが日本語の参考サイトがちょっと足りない
962nobodyさん:2013/01/17(木) 17:12:24.33 ID:???
werkzeug
963nobodyさん:2013/01/17(木) 17:18:42.74 ID:???
Flask
964nobodyさん:2013/01/17(木) 17:55:19.40 ID:IKfy6gSY
Google謹製のwebapp2が軽くていいや
965nobodyさん:2013/01/17(木) 18:08:21.07 ID:???
web2pyってGAE的にはどうなんかな
966nobodyさん:2013/01/17(木) 18:19:11.98 ID:???
標準のwebapp2で今のとこ充分
多少の不満は手入れできるし
appengineメインで設計されてるんで楽だし
967nobodyさん:2013/01/17(木) 18:59:33.57 ID:???
フレームワークなんて雨後の筍のように出てきてすぐに廃れていくんだから、学習コスト
が無駄すぎる

枯れてる生に近いやつ選べ
968nobodyさん:2013/01/17(木) 19:27:35.17 ID:???
おれもwebapp2だな
レンダリングだけDjango
969961:2013/01/17(木) 19:49:45.75 ID:???
なるほど、参考になった
webapp2で良さそうだな
ルーティングめんどくさいけど、javaのweb.xmlでマッピング設定情報をXMLでシコシコ書き込むよりはマシだろう

ちなみにこれをFlaskで実装しようとしたがワケワカメで挫折した
tp://localhost:8080/image
キャプチャ認証に使えそうなテキスト文字画像を出力する処理ね
(Arial.ttfはスクリプトファイルと同じ場所にファイル持ってきて置く)

import webapp2
from PIL import Image, ImageDraw, ImageFont

class ImageCreater(webapp2.RequestHandler):
def get(self):
color = "green"
text = "AhsAA"
canvas = Image.new('RGB', (80,40), color)
font = ImageFont.truetype("Arial.ttf", 20)
draw = ImageDraw.Draw(canvas)
draw.text((10,10), text, font=font)
self.response.headers["Content-Type"] = "image/png"
canvas.save(self.response.out, "PNG")

app = webapp2.WSGIApplication([
('/image', ImageCreater)
], debug=True)
970nobodyさん:2013/01/17(木) 21:07:06.49 ID:???
# Flaskで書くとこんな感じ
from flask import Flask, Response
from PIL import Image, ImageDraw, ImageFont

app = Flask(__name__)

@app.route('/image')
def image_creator():
  color = "green"
  text = "AhsAA"
  canvas = Image.new('RGB', (80,40), color)
  font = ImageFont.truetype("Arial.ttf", 20)
  draw = ImageDraw.Draw(canvas)
  draw.text((10,10), text, font=font)
  res = Response(mimetype='image/png')
  canvas.save(res.stream, "PNG")
  return res
971961:2013/01/17(木) 21:34:40.90 ID:???
>>970

ありがとう
972nobodyさん:2013/01/18(金) 09:05:01.27 ID:d9ZkYgTb
スレッドセーフは?
973966:2013/01/18(金) 10:27:21.28 ID:???
>>969
webapp2はルーティング面倒かな
Routesに並べてもいいしFlaskみたいなSinatraライクも可能
Routesには文字列で渡しておいて遅延importも可能
結構柔軟で良いんだけど
974nobodyさん:2013/01/18(金) 13:10:05.82 ID:???
webapp2でモデルとかハンドラとか
どういうモジュールにしていったらいいのか
わかんねーよーたすけて
975nobodyさん:2013/01/18(金) 16:01:56.27 ID:???
>>974
Flaskで言うと
http://a2c.bitbucket.org/flask/patterns/packages.html
こういうことをやりたいのかな?
976nobodyさん:2013/01/18(金) 16:13:53.51 ID:???
MVCをきっちりフォルダ分け(※)してるWebアプリケーションフレームワークの経験あると
1コントローラー1ファイル、1モデル定義1ファイルで分けたくなるよね
webapp2はそこらへんを詳しく説明する資料少ないかもしれん
俺も色々ググってるうちに上のFlaskの資料を見つけて
「webapp2じゃなくてFlaskでいいか」となったw


myapp/
 controller/
 view/
 model/
977nobodyさん:2013/01/18(金) 18:49:32.93 ID:???
>>975
Moduleは廃止されてBlueprintに置き換わった
http://flask.pocoo.org/docs/blueprints/
978nobodyさん:2013/01/18(金) 20:15:29.49 ID:???
>>977
>>974に関連する質問だけど、webapp2にはこういう機能ないのかな
979nobodyさん:2013/01/19(土) 02:50:41.71 ID:2VybpXiQ
カテゴリごとにハンドラクラスをつくって、
Routesの仕組みを使って
ハンドラクラスの中の関数をよぶみたいな感じじゃいかんの?
980nobodyさん:2013/01/19(土) 10:03:08.40 ID:???
いいよ〜
いいよ〜
981nobodyさん:2013/01/19(土) 11:46:53.52 ID:???
こんな感じでええんとちゃうん?
project/
 controller/ ←これを作成
  __init__.py ←この名前の空ファイルも作成
  foo.py ←適当なハンドラ
  bar.py ←適当なハンドラ
 app.yaml
 main.py
982nobodyさん:2013/01/19(土) 11:47:51.98 ID:???
#######################
main.py
#######################
import webapp2
from controller import *

app = webapp2.WSGIApplication([
("/foo", foo.fooHandler),
("/bar", bar.barHandler)
], debug=True)
#######################
controller/__init__.py
#######################
import os

handlers = []
except_list = ["__init__.py"]

for filename in os.listdir("controller"):
if filename.endswith(".py"):
if filename not in except_list:
handlers.append(filename.rstrip(".py"))

__all__ = handlers
#######################
983nobodyさん:2013/01/19(土) 11:50:57.24 ID:???
インデント崩れた; 適当に直しておいて
あとFooHandlerだったわ 小文字→大文字

##########################
controller/foo.py
##########################
import webapp2

class FooHandler(webapp2.RequestHandler):
 def get(self):
  self.response.out.write("Hello Webapp2!")
##########################
984nobodyさん:2013/01/19(土) 13:00:09.47 ID:???
このスレでコード見るなんて胸熱
985nobodyさん:2013/01/19(土) 13:16:21.58 ID:???
俺はwebapp2でちょっと複雑なのはこんな感じにしてる

apps/
 api/
 back/
  hadlers/
   bar.py
    BooHandler
  templates/
  static/
  main.app
 front/
common/
models/
 baz.py
  Foo
  Bar
  Boo
lib/
app.yaml
986nobodyさん:2013/01/19(土) 13:18:56.36 ID:???
>>982
ルーティングは、
routes = [
 ('/foo/(.*)', 'apps.front.handlers.foo.ShowHandler'),
 ('/foo', 'apps.front.handlers.foo.IndexHandler'),
 ('/', 'apps.front.handlers.index.IndexHandler'),
]
とか文字列で組み立てて、
app = webapp2.WSGIApplication(routes, debug=DEBUG, config=config)
って渡せば遅延ロードになるよ
987nobodyさん:2013/01/19(土) 13:45:11.18 ID:???
>>984
継ぎスレいらないよね
988nobodyさん:2013/01/19(土) 13:51:40.19 ID:???
最近の人気エントリ


Google APP Engine Python入門(2010年2月版)
ttp://d.hatena.ne.jp/kagigotonet/20100209/1265726225
> Google  APP Engineについては初期のころのまとめはあるのですが、Pythonですとリリースからそろそろ2年近くになり内容も大きく様変わりしています。
> 最速マスターシリーズでもGoogle APP Engineについてのまとめが無く、そろそろアップデートの必要があると思いまとめてみました。
>  基本的にwindows環境中心です。


Google App Engineを使って無料でサイトを立ち上げる方法
http://techblog.ecstudio.jp/tech-tips/freewebsite-with-google-app-engine.html
> このGoogle App Engine(以下 GAE)、アプリケーション開発だけでしか使えないと思われがちなのですが、実は設定を工夫すれば通常のHTMLによるサイトを作って運用することも可能です。
> 多少初期設定の手順は複雑ですが、このスペックのサーバーを無料で使用出来ることを考えれば試してみる価値はあるのではないかと思います。
> Webサイトを立ち上げるまでの手順をまとめてみましたので、公開したいと思います。


【特集】Google App Engineで開発するためのフレームワーク × 16 + α
http://coolcoding.com/2010/01/frameworks_for_gae/
> いざGAEで開発をはじめるとしても、素のままで書き始める必要はありません。
> すでに多様なフレームワークが提供されており、そうしたフレームワークを活用することでより素早くGAE上での開発ができるようになります。
> 今回はGAEで開発を行う際にチェックしたいフレームワークを紹介したいと思います。


Google App Engineで開発するスケールするアプリケーション(前編)
http://codezine.jp/article/detail/4591
> 本稿の前編では、主にGoogle App Engineの概要と特徴、そしてWebシステムをスケールするための手法、考え方について説明します。
> 中編・後編では、Google App Engine上で動作する、twitterと連携したアプリケーションを紹介し、Google App Engine上でのアプリケーション構築方法について説明します。
989nobodyさん:2013/01/19(土) 13:52:28.05 ID:???
最近の人気エントリ


Google APP Engine Python入門(2010年2月版)
ttp://d.hatena.ne.jp/kagigotonet/20100209/1265726225
> Google  APP Engineについては初期のころのまとめはあるのですが、Pythonですとリリースからそろそろ2年近くになり内容も大きく様変わりしています。
> 最速マスターシリーズでもGoogle APP Engineについてのまとめが無く、そろそろアップデートの必要があると思いまとめてみました。
>  基本的にwindows環境中心です。


Google App Engineを使って無料でサイトを立ち上げる方法
http://techblog.ecstudio.jp/tech-tips/freewebsite-with-google-app-engine.html
> このGoogle App Engine(以下 GAE)、アプリケーション開発だけでしか使えないと思われがちなのですが、実は設定を工夫すれば通常のHTMLによるサイトを作って運用することも可能です。
> 多少初期設定の手順は複雑ですが、このスペックのサーバーを無料で使用出来ることを考えれば試してみる価値はあるのではないかと思います。
> Webサイトを立ち上げるまでの手順をまとめてみましたので、公開したいと思います。


【特集】Google App Engineで開発するためのフレームワーク × 16 + α
http://coolcoding.com/2010/01/frameworks_for_gae/
> いざGAEで開発をはじめるとしても、素のままで書き始める必要はありません。
> すでに多様なフレームワークが提供されており、そうしたフレームワークを活用することでより素早くGAE上での開発ができるようになります。
> 今回はGAEで開発を行う際にチェックしたいフレームワークを紹介したいと思います。


Google App Engineで開発するスケールするアプリケーション(前編)
http://codezine.jp/article/detail/4591
> 本稿の前編では、主にGoogle App Engineの概要と特徴、そしてWebシステムをスケールするための手法、考え方について説明します。
> 中編・後編では、Google App Engine上で動作する、twitterと連携したアプリケーションを紹介し、Google App Engine上でのアプリケーション構築方法について説明します。
990nobodyさん:2013/01/19(土) 14:00:56.96 ID:???
フレームワーク利用に対するデメリットを書かないフレームワーク紹介記事ほど
迷惑な行為はないもんだ
991nobodyさん:2013/01/19(土) 15:43:30.28 ID:???
次スレ欲しいけどなあ

>>990
自分で構築しない連中が書くんだからしょうがない
このフレームワークのここが嫌い
とかいう個人の感想の方がよほどためになるよね
992nobodyさん:2013/01/19(土) 15:47:45.08 ID:???
もう立ってるよ

Google App Engine for Python 6アプ目
http://kohada.2ch.net/test/read.cgi/php/1358570953/
993nobodyさん:2013/01/19(土) 15:53:18.66 ID:???
>>992
ありがと
でもテンプレふるくさいし浅いね

なんか替わり投げてみる
994nobodyさん:2013/01/19(土) 16:37:06.07 ID:???
ume
995nobodyさん:2013/01/19(土) 18:27:29.23 ID:???
u
996nobodyさん:2013/01/19(土) 18:28:36.74 ID:???
梅の季節
997nobodyさん:2013/01/19(土) 19:36:12.22 ID:???
ume
998nobodyさん:2013/01/20(日) 14:51:07.37 ID:???
ume
999nobodyさん:2013/01/21(月) 04:14:59.58 ID:???
drop
1000nobodyさん:2013/01/21(月) 09:12:17.18 ID:???
うめ
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。