Python3でTornadoを動かしてみる

久しぶりの更新ですね。やっぱり習慣化してないとブログ書くのも大変ですね。。。
なので頑張って習慣化する為、1記事書きます!
内容は今勉強中のTornadoについてです。

Tornadoとは?

そもそもTornadoってなんでしょう?
Webフレームワークの一つですね。公式サイトは以下からどうぞ

http://www.tornadoweb.org/en/stable/#

公式サイトによると、

TornadoはFriendFeedで開発されたPythonのWebフレームワーク(非同期通信ライブラリ)です。
ノンブロッキングネットワークI / Oを使用することで、Tornadoは数万のオープン接続に拡張でき、
ロングポーリング、WebSocket、および各ユーザーへの長時間の接続が必要なその他のアプリケーションに最適です。

とあります。
つまりどゆこと??ってなりますよね。
とりあえず以下の特徴があるんだな程度の認識を持って頂ければよいかと。

FriendFeedが開発(Facebook社)
・Python2系, Python3系, PyPyで動作する
・シンプルだから高速に動作する
・テンプレートエンジンが同梱されている
・シングルプロセス、シングルスレッド

特にパフォーマンスに関しては目を見張るものがあります。
以下にベンチマーク結果を紹介しておきます。
Wiki参照です。
https://ja.wikipedia.org/wiki/Tornado_(Web%E3%82%B5%E3%83%BC%E3%83%90)

f:id:kyamisama:20180910181932p:plain

Tornadoのインストール

以下コマンドでTornadoをインストール

$ pip install tornado

Hello Worldを表示させる

公式サイトにサンプルソースコードが紹介されているのでそのままコピペして動かしてみる。

import tornado.ioloop
import tornado.web
 
	class MainHandler(tornado.web.RequestHandler):
    	def get(self):
        	self.write("Hello, world")
 
	def make_app():
    	return tornado.web.Application([
        	(r"/", MainHandler),
    ])
 
	if __name__ == "__main__":
    	app = make_app()
    	app.listen(8888)
    	tornado.ioloop.IOLoop.current().start()

簡単にコードを簡単に説明する。

class MainHandler(tornado.web.RequestHandler):
    	def get(self):
        	self.write("Hello, world")
    
RequestHandlerクラスのgetメソッドを継承し、HTTPリクエストGETが来た場合
self.writeにより”Hello World”を表示する。
    
def make_app():
    	return tornado.web.Application([
        	(r"/", MainHandler),
    ])

r"/"のrは正規表現を表す。"/"は現在の階層を差す。つまりカレントディレクトリである。
なのでlocalhost/にブラウザからアクセスするとMainHandkerクラスが呼ばれ、アクセスがGETであれば
Hello Worldをブラウザに表示する仕組みだ。

HTMLページをブラウザに表示させる

import tornado.ioloop
import tornado.web

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write('''
	<!DOCTYPE html>
	<html>
	<head>
	</head>
	<body>
	<p><font size="10" color="#00ff00">Test!</font></p>
	</body>
	</html>
''')

class MainHandler2(tornado.web.RequestHandler):
    def get(self):
        self.write("Hello, samurai")

def make_app():
    return tornado.web.Application([
        (r"/", MainHandler),
	(r"/test/", MainHandler2),
    ])

if __name__ == "__main__":
    app = make_app()
    app.listen(8888)
tornado.ioloop.IOLoop.current().start()

サンプルコードにヒアドキュメント形式でHTMLをPythonプログラム内に埋め込んでいる。
実行して頂ければ分かると思うが、これでも一応HTNLを表示することは出来る。

おそらくこのような方法でHTMLを表示させたいんじゃないんだ!!って方が多いと思いますので
次回TornadoプログラムからHTMLファイルを呼び出す方法をご紹介したいと思います。

それでは今回ははここまでです。
閲覧しに来てくださった方ありがとうございました。

mac book proにPython3の実行環境を構築する

Pythonの勉強を始めて3ヶ月ちょっと経過したので新しいパソコンを購入しました。

なのでmacでのPython3環境を構築する際のメモ書きを残します。

pyenvのインストール

pyenvとは、簡単に言うとPythonのバージョンを管理することができます。バージョン管理もとても簡単でコマンド一つで3系にも2系にもバージョンを変更することができます。

では早速pyenvをインストールしてみます。

macのターミナルを開きpyenvをクローンします。

$ git clone git://github.com/yyuu/pyenv.git ~/.pyenv

ただしmacXcodeがインストールされていないと下記のような応答が帰る。

xcode-select: note: no developer tools were found at '/Applications/	Xcode.app', requesting install. Choose an option in the dialog to download the command line developer tools.

そしてXcodeインストールポップアップが表示される。

f:id:kyamisama:20180814125744p:plain

特に気にする事もなくインストールを押します。
十数分ほど待つと以下のように完了の画面が出てきます。

f:id:kyamisama:20180814130426p:plain

pyenvにPATHを通す

mac.bash_profileにpyenvのPATHを通します。
その前にmacに.bash_profileが存在するか確認しましょう。
下記コマンドで.bash_profileが表示されれば存在しますが、
表示されなければtouchコマンドで用意しましょう。

$ ls -la|grep "profile"

表示されない場合は下記コマンドで.bash_profileを用意する。

$ cd
$ touch .bash_profile

.bash_profileを用意できたらいよいよPATHを通します。
何も考えず下記コマンドを実行

$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(pyenv init -)"' >> ~/.bash_profile

念のため確認。

$ cat ~/.bash_profile 
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

上記のように表示されればOK

pyenvでPython格バージョンをインストールする。

下記コマンドを実行することで任意のバージョンをインストールできる。
※PATHを通した後、一度ターミナルを閉じる必要があります。でないとpyenvコマンドが利用できません。

$ pyenv install 3.4.3
$ pyenv install 2.7.9

インストール後shimをリフレッシュしておく。

$ pyenv rehash

Pythonのバージョンを指定する

pyenvでPythonのバージョンを管理するコマンドは2種類あります。
pyenv global x.x.x もしくは pyenv local x.x.x です。
globalとlocalの違いは、globalだと全体に、localにするとカレントディレクトリのみがバージョンの対象となります。
なのでよくある使い方としては、localでフォルダごとにバージョンを設定します。

$ pyenv global 3.4.3
$ python -V
Python 3.4.3

技術ブログのような何か始めます。

はじめまして皆様kyamisamaです。

 

これから技術関係の備忘録や日常のアレコレをつらつらと書き連ねていこうと思っています。

 

以前にもブログ的なものを書いていましたが、なかなか続けられず止めてしまいました。

まぁ今回は執筆のメインが技術ブログという事なのでやっていけそうな気はしています。

技術の備忘録はプログラム言語からNW、サーバ系です。

特に今年の5月からPythonを勉強し始めましたので、その記事が多いと思います。

 

できる限り頻繁に更新したいと思っていますので、どうぞよろしくです。