EnsekiTT Blog

EnsekiTTが書くブログです。

Pythonでデーモンを召喚した話

デーモンってちゃんと説明するとなんだっけ?

と思ってWikipediaで調べてきた。
UNIXなどのマルチタスクオペレーティング・システムにおいてバックグラウンドプロセスとして動作するプログラムを意味する。ユーザが直接対話的に制御するプログラムではない。典型的なデーモンは名前の最後尾に”d”がつく。例えばSyslogdはシステムログを扱うデーモンだ。
UNIX系の環境では、デーモンの親プロセスはinitプロセスになっていることが多い。
デーモンは起動処理内でForkで子プロセスを作成し、親プロセスのほうが即座に終了するため、initが里親となる。更に、デーモンまたはOSは制御端末(tty)からの切り離しなどの処理も行う必要がある。こういったデーモンを生成するための手続きをUNIX系ではdaemon(3)などの便利なルーチンにまとめて実装していることが多い。

Pythonによるデーモンのサンプルスクリプト

import os
import sys
import time

def createDaemon():
    pid = os.fork()

    if pid > 0:
        f2 = open('/var/run/oredaemon.pid','w')
        f2.write(str(pid)+"\n")
        f2.close()        
        sys.exit()

    if pid == 0:
        i = 0
        while True:
            f = open('/home/ensekitt/testest.txt','a')
            f.write(str(i) + "\n")
            f.close()
            time.sleep(1)

            i += 1

if __name__ == '__main__':
    createDaemon()

HerokuボタンでイカしたTornadoアプリをみんなに使ってもらいたい

つまり何したの?

Tornadoアプリを作ってフォークして使ってもらえるようにした。

環境:

前回のDjangoの例から拾い上げた必要そうな要素:

  • Procfile
  • runtime.txt
  • requirements.txt
  • app.json

すぐ使えるように作ったリポジトリがこちら
github.com

試してみる

# 拾ってくる
% git clone https://github.com/EnsekiTT/HerokuTest.git
% cd HerokuTest

# Heroku上で実行する
% heroku create
% git push heroku master
% heroku open

# ローカルで実行する
% pyenv virtualenv 3.5.2 herokutest
% pyenv local herokutest
% pip install -r requirements.txt

必要そうな要素の説明

Procfile: 実行するコマンドを指定する

web: python server.py --port=$PORT

Herokuのポート番号は$PORTで与えられることに注意

runtime.txt: Pythonのバージョンを指定する

python-3.5.2

このファイルを用意しないでPythonを実行すると2.7系が選択される

requirements.txt: 必要なPythonのパッケージを指定する

tornado==4.4.2

ここではTornadoだけ。必要に応じて

pip freeze > requirements.txt

などして追加編集する

server.py: サーバ本体

import tornado.ioloop
import tornado.web

from tornado.options import define, options
define("port", default=5000, help="run on the given port", type=int)
tornado.options.parse_command_line()

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(tornado.options.options.port)
tornado.ioloop.IOLoop.current().start()

Tornadoのチュートリアルとほとんど同じ。
Tornado Web Server — Tornado 4.4.2 documentation


Procfileの指定の通り、ポート番号を引数で得るように変更してある。

App.json: Herokuボタンのための設定JSON

{
  "name": "HerokuTest",
  "env": {
    "APP_USER_NAME": ""
  }
}

アプリの名前と、このタイミングで入れてもらいたい環境変数などを指定できる。
(どっかのAPIを使っているならAPIキー等)

まとめ

これでHerokuボタンで使ってもらえるかも知れないアプリが作れるようになった。

HerokuのDjangoチュートリアルをやってみた話

つまり何したの?

Herokuのチュートリアルに従ってWebアプリケーションをデプロイした。

環境:

  • macOS Sierra 10.12.3
  • brew
  • git
  • pyenv virtualenv

参考文献

devcenter.heroku.com


Heroku CLIをインストール

devcenter.heroku.com

% brew install heroku
% heroku --version
heroku-cli/5.7.0-713be60 (darwin-amd64) go1.7.5
続きを読む

mongoDBのインストールをやってみた話

つまりなにしたの

mongoDBのインストールをやってみた。あといらなくなったときの対応も調べた。

インストール

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6

echo "deb [ arch=amd64,arm64 ] http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list

sudo apt update

sudo apt install -y mongodb-org

使う

MongoDBを起動する

sudo service mongod start

MongoDBを停止する

sudo service mongod stop

MongoDBを再起動する

sudo service mongod restart

PhpMoAdminを使えるようにしてもっとインタラクティブ

wget http://www.phpmoadmin.com/file/phpmoadmin.zip
unzip phpmoadmin.zip
mv moadmin.php /var/www/html/moadmin.php

phpMoAdminは便利なのでぜひ入れておいたほうが良い

いらなくなったら

mongoDBを消す

sudo service mongod stop
sudo apt-get purge mongodb-org*
sudo rm -r /var/log/mongodb
sudo rm -r /var/lib/mongodb

PhpMoAdminを消す

sudo rm -r /var/www/html/moadmin.php

Ubuntu16.04にPix2Pixをインストールした話

つまりなにしたの

pix2pixを使って論文で見たような素敵なことが起きるのか自分のマシンで試してみた。

環境

OS :Ubuntu16.04
CPU :i7-6700 3.40GHz
MEM :16Gbyte
GPU :GTX1070 GDDR5/8GB
CUDA :V8.0.44
cuDNN :5.1.05
Python : 3.5.2

参考にしたサイト

github.com

続きを読む

Ubuntu16.04にTorch7をインストールした話

今まで自分は音とか電気の信号処理が多かったのでTorchを触って来なかった。
ここに来てpix2pixを触ってみた過ぎてTorchを入れた話。

つまりなにしたの

pix2pixを使って見るためにTorchをインストールした話。

環境

OS :Ubuntu16.04
CPU :i7-6700 3.40GHz
MEM :16Gbyte
GPU :GTX1070 GDDR5/8GB
CUDA :V8.0.44
cuDNN :5.1.05
Python : 3.5.2

参考にしたサイト

torch.ch
ほぼそのまんま。

続きを読む

macOS Sierra + PyEnv環境でimport cv2するまでの長い長い道のり 〜2016年12月の場合〜

OpenCV3.2のニュースを見かけて、そういえば最近画像処理してないな!と思い立った。
本当であればさくっと環境を整えて、Lennaと戯れるつもりだった。
f:id:ensekitt:20161228020326j:plain
Lennaについて: The Rest of the Lenna Story

そこからimport cv2するまでの長い長い道のりの記録。

なにしようとしたの?

macOS Sierra上のpyenv-virtualenv環境でimport cv2しようとした。

何に困ったの?

brewOpenCVを入れるところ
pyenv-virtualenvでimportできるようにするところ

環境

macOS Sierra 10.12.2
pyenv 1.0.3
OpenCV 3.2(のつもりで結果的に3.2.0-dev)

続きを読む