(娘5歳8ヶ月)娘の好物と年長さん1学期のお弁当記録 娘をただ微笑ましく見つめていただけなのに……(夫) こっこの最近の好物は「にんじんしりしり」と納豆を混ぜて食べること。 我が家のしりしり&納豆好きといえばまず夫ですが、夫は卵入りのしりしりが好きで、こっこはにんじんとツナのしりしりが好き。わたしはどっち…

(娘5歳8ヶ月)娘の好物と年長さん1学期のお弁当記録 娘をただ微笑ましく見つめていただけなのに……(夫) こっこの最近の好物は「にんじんしりしり」と納豆を混ぜて食べること。 我が家のしりしり&納豆好きといえばまず夫ですが、夫は卵入りのしりしりが好きで、こっこはにんじんとツナのしりしりが好き。わたしはどっち…
Pythonのお勉強を兼ねて、先日 Cで書いた C言語でprefork型のデーモンを書く(3): デーモン化 - Sleepless geek in Seattle をPythonに移植してみた。 条件分岐、ループ、関数定義、ファイル操作、fork、wait、シグナルハンドラ、連想配列、などなど短いプログラムだけど、いろいろな要素が入っているのでなかなか良いサンプルになった。 #!/usr/bin/env python import os import sys import signal import time MAX_CHILDREN=16 PID_FILE='/var/run/my_prefork_daemon.pid' hash_children={} def main(): #デーモン化 daemonize() #プロセスIDを書いておく write_pid() #シグナルハンドラ
pythonでデーモンを書きたいと思って、調べてみると「Pythonでprefork型のデーモンを書く」という記事を見つけました。この内容が素晴しくて、プロセスもデーモンも初心者な僕でも処理の大枠を理解できました。 それで、デーモン化する為のモジュールってあるんじゃないのと思いpypiを見てみると、複数のモジュールが登録されていました。その中で一番リッチな機能を持つDaemonContextを使ってみる事にしました。 インストールはeasy_installで一発です。 $ easy_install python-daemon 使い方も簡単でDaemonContextオブジェクトを作成して、そのwith構文中がDaemon化されます。 #!/usr/bin/python # -*- coding: utf-8 -*- from __future__ import with_statement
10.1 hashlib -- セキュアハッシュおよびメッセージダイジェスト バージョン 2.5 で 新たに追加 された仕様です。 このモジュールは、セキュアハッシュやメッセージダイジェスト用のさまざまな アルゴリズムを実装したものです。FIPSのセキュアなハッシュアルゴリズムであ るSHA1、SHA224、SHA256、SHA384およびSHA512 (FIPS 180-2 で定義されている もの) だけでなくRSAのMD5アルゴリズム (Internet RFC 1321 で定義されてい ます)も実装しています。「セキュアなハッシュ」と「メッセージダイジェスト」 はどちらも同じ意味です。古くからあるアルゴリズムは「メッセージダイジェス ト」と呼ばれていますが、最近は「セキュアハッシュ」という用語が用いられて います。 警告: 中には、ハッシュの衝突の脆弱性をかかえているアルゴリズムもあ
エコーサーバを写経してみた。 echo_server.py # vim: fileencoding=utf8 sts=4 sw=4 import SocketServer class EchoHandler(SocketServer.StreamRequestHandler): def handle(self): print "connect from:", self.client_address while True: data = self.request.recv(8192) if len(data) == 0: break self.request.send(data) self.request.close() if __name__ == '__main__': #server = SocketServer.TCPServer(('', 12345), EchoHandler)
Echoサーバ/クライアントを通してサーバプログラミングを極める 1connection Server from SocketServer import * RECV_BUF = 8192 class Handler(BaseRequestHandler): def handle(self): print "connect from:", self.client_address while True: ret = self.request.recv(RECV_BUF) if len(ret) == 0: break self.request.send(ret) self.request.close() def main(): sv = TCPServer(('', 7070), Handler) print 'listen to:', sv.socket.getsockname() sv.
ミクシンクラスは UDPServer で定義されるメソッドをオーバライドするために、 先に来なければなりません。様々なメンバ変数を設定することで元になるサーバ機構の振る舞いを変えられます。 サービスの実装には、 BaseRequestHandler からクラスを派生させてその handle() メソッドを再定義しなければなりません。このようにすれば、サーバクラスと要求処理クラスを結合して様々なバージョンのサービスを 実行することができます。要求処理クラスはデータグラムサービスかストリームサービスかで異なることでしょう。この違いは処理サブクラス StreamRequestHandler または DatagramRequestHandler を使うという形で隠蔽できます。 もちろん、まだ頭を使わなければなりません! たとえば、サービスがリクエストによっては 書き換えられるようなメモリ上の状態を
17.2 socket -- 低レベルネットワークインターフェース このモジュールは、PythonでBSD ソケット インターフェースを利用する ために使用します。最近のUnixシステム、Windows, MacOS, BeOS, OS/2な ど、多くのプラットフォームで利用可能です。 注意: いくつかの振る舞いはプラットフォームに依存します。これはオペレーティングシステム のソケットAPIを呼び出しているためです。 C言語によるソケットプログラミングの基礎については、以下の資料を参照して ください。 An Introductory 4.3BSD Interprocess Communication Tutorial (Stuart Sechrest), An Advanced 4.3BSD Interprocess Communication Tutorial (Samuel J. Le
「ディレクトリを再帰的にコピーするには」において、2つのディレクトリーの内容をだいたい一致させる方法を示しました。でも、この方法は単なるコピーで、完全な同期を取るものではありません。origin/ の内容を target/ にコピーしたとき、状況は次のようになります。 origin/ の配下にあるファイルは全て target/ にもある*1(ファイルの中身も同じ)。 target/ の配下にはあるが、origin/ 側には存在しないファイルもある。 同期(ミラーリング)するときは、「target/ の配下にはあるが、origin/ 側には存在しないファイル」は削除します。僕の当面の用途では、削除するのはダメです(とんでもないことです)。ですが、「target/ の配下にはあるが、origin/ 側には存在しないファイル」がどのくらいあるかは気になるところです。そこで、次のような機能を持つコ
import os os.chdir(path) 現在の作業ディレクトリ path に設定する os.getcwd() 現在の作業ディレクトリを表現する文字列を返す os.chmod(path, mode) path のモードを数値 mode に変更する os.listdir(path) path内のファイル、ディレクトリのリストを返す os.mkdir(path[,mode]) 数値で指定されたモード mode をもつディレクトリ path を作成する os.mkdirs(path[,mode]
(娘5歳8ヶ月)娘の好物と年長さん1学期のお弁当記録 娘をただ微笑ましく見つめていただけなのに……(夫) こっこの最近の好物は「にんじんしりしり」と納豆を混ぜて食べること。 我が家のしりしり&納豆好きといえばまず夫ですが、夫は卵入りのしりしりが好きで、こっこはにんじんとツナのしりしりが好き。わたしはどっち…
TCP/IPプロトコルでのネットワークプログラムをPythonで書くための練習。 今回の検討項目 前回(http://d.hatena.ne.jp/Megumi221/20110412 )までに、クライアント-サーバ型の簡単な計算プログラムを作成した。計算プログラムでは、サーバプログラムは、送られてきた数式をevalして値を送信するだけだったが、今回はもう少しサーバ側の処理が重い場合の実装を考えてみる。 具体的には、サーバプログラムで数十分かかる計算を実行することにする。計算プログラムはあらかじめ別に作成しておき、その実行モジュールを外部プロセスとしてPythonプログラムから起動する。 外部プロセスの起動方法としては以下を参考に。 参考サイト 試験運用中なLinux備忘録 Pythonで外部プロセスを起動して出力と戻り値を処理する 外部プロセス実行プログラム 前回の計算プログラムをベース
軽量・高速なデータベースSQLiteをPythonから扱うためのライブラリ。 インストール Python2.5から標準ライブラリに入りました。 インストール作業は不要です。 使用方法 sqlite3をインポートする #!python2.6 # -*- coding: utf-8 -*- import sqlite3 データベースを作成する con = sqlite3.connect("data.db") ファイルがすでに存在するときはファイルを開く。 ファイルがないときは新しいデータベースを作成する。 isolation_levelにNoneを指定すると、自動コミットモードになります。 con = sqlite3.connect('temp.db', isolation_level=None) 特別な名前である ":memory:" を使うとRAM上にデータベースを作ることもできます。 c
py2exe (Windows 実行形式に変換) - Python スクリプトからスタンドアロンのWindows... Python スクリプトからスタンドアロンのWindowsプログラムへの変換 Copyright (C) 2001, 2002, Thomas Heller **このドキュメントは py2exe バージョン 0.3.1 に対応した説明です. 最新のバージョンである 0.5.0 では,インタフェースがいくつか変更されていて,このページの サンプルが動作しません. py2exe 0.5.0 に関する説明は, こちら をご覧ください.** 概要 py2exeはPython スクリプトをスタンドアロンのWindows実行形式に変換する モジュールで,distutils の拡張として実装されている. py2exeを使って実行形式にしたプログラムは,Pythonをインストールせず
[Home] [Setting up Mac OS X] [Python]: [ファイルを読む] 日本語を使う Pythonで日本語を使う Python 2.4以降では、標準で日本語を扱うことができます。 PythonのソースコードをUTF-8で書くには 日本語を扱うPythonのスクリプトの中では、UTF-8の文字コードを使うのが 楽です。 Mac OS Xのターミナルで日本語を扱う場合は、 ここの「4. Terminalの設定を変える」の 指示に従ってください。 以下、ソースコードの簡単な例を示します。 #!/usr/bin/env python # -*- coding: utf-8 -*- import re jtext = u'子猫が隠れんぼをしています' print 'jtext has', len(jtext), 'Japanese characters.' if re.se
プロデューサー目線、裏読みコンテンツの氾濫:一億総「裏方」化時代を診断する ●「え?さっきのオタク、君の知り合いじゃないの?」 今から20 年近く前。あるレコード会社の新人スタッフだった私は、某人気声優さんのコンサート会場に手伝い要員として参加しました。沢山のお客さんで賑わう物販ブースの傍らで、先輩社員やマネージメントのスタッフ…
Pythonでも所謂ジェネレータを使えます。無限数列を求めたりする例がよく紹介されていますね。 #!/usr/bin/python # -*- coding: utf-8 -*- def get_fib(): (a, b) = (0, 1) yield a yield b while True: (a, b) = (b, a + b) yield b def main(): fib = get_fib() for i in range(10): print fib.next() if __name__ == '__main__': main() ジェネレータはnext()を呼ぶ度に新しい値を返す訳ですが、例えば5回next()を呼んでからジェネレータ自身を保存して置いて、後から6回目以降を呼び出したいというのが本エントリでの話です。 要はジェネレータオブジェクトを(デ)シリアライズしたいの
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く