Python スクリプティング・フレームワーク |
|
boinc/py/Boinc というディレクトリに
Boinc用の[Python] モジュールが置かれています。
ですから、pythonのパスに boinc/py/ が入れてあれば、
例えば、以下のような書き方ができます。
from Boinc.setup_project import *
pythonのパスに boinc/py/ が必ず入るように
するには、以下のようにします。
import boinc_path_config
boinc_path_config は、configureが関連するディレクトリに
置く特別なモジュールで、[pythonのシステムパスである]
sys.path を適切に変更するものです。
boinc_project_path というモジュールを、
config.xml と
run_state.xmlへのパスを得るために import します。
これらのファイルへのデフォルトのパスは、
スクリプトを起動したディレクトリの親ディレクトリです。
このデフォルトは下記のようにして、置き換えることができます。
boinc_project_path.pyの例
config_xml_filename = '/etc/boinc/yetiathome/config.xml' run_state_xml_filename = '/var/lib/boinc/yetiathome/run_state.xml'詳細については、ソースファイル
boinc/py/Boinc/boinc_project_path.py をご覧ください。
boinc/py/Boinc/*.py |
主要な BOINC 用 python モジュールの置き場所 |
boinc/sched/start |
BOINCの起動 / 定期的な仕事を制御する親プログラム |
boinc/tools/xadd |
[BOINC]データベースに各種オブジェクトを追加します。 |
boinc/tools/make_project |
プロジェクトの作成 |
boinc/tools/update_versions |
関連するすべてのコア・クライアントとアプリケーションの実行可能ファイルを、 ダウンロード・ディレクトリおよび[BOINC]データベースに追加します。 |
boinc/test/test*.py |
テスト用スクリプト: テスト用フレームワーク をご覧ください。 |
boinc_path_config.py.in |
Configure は、必要なディレクトリの全てに
boinc_path_config.py を置きます。
[boinc_path_config.py.in はその雛形です]。
前述の説明を参照してください。 |
boinc_project_path.py |
config.xml ほかのファイルが見えるように
設定します。 前述の説明を参照してください。 |
configxml.py |
config.xml と run_state.xml
を読み書きします。 詳細は、それぞれ pydocで見てください。 |
boinc_db.py |
これは自動生成されるスクリプトで、
データベース関連の定数指定が入っています。 たとえば、
RESULT_OUTCOME_SUCCESS = 1 |
setup_project.py |
プロジェクト作成のための内部モジュールです。
make_project と
テスト用スクリプトを参照してください。 |
database.py |
データベース[アクセスのため]のバックエンド関数と データベース運用操作を定義しています。 後述の説明を見てください。 . |
db_mid.py |
[データベースの] 'middle-end' として、組み込むかどうかを 選択できるモジュールです。 データベース内のオブジェクトを直接出力できるようにして、 デバッグを容易にします。 |
util.py |
雑多な機能の集まりです。 |
version.py.in |
版ごと、またはプラットフォームに依存する定義であり、
configure の入力となります。 |
Database.py は、データ操作を容易にするためのもので、
データベース用バックエンド・ライブラリおよび、
データベース・テーブルとオブジェクトとの関係を定義しています。
全てのデータベース・テーブルは、
対応するクラスを持ちます。 テーブルの行もクラスをもっていて、
各カラムはそのクラスのメンバーです。
[テーブルの行を区別する] id の値訳注2は、
オブジェクトとの間で双方向に自動変換されます。
まずは、 database モジュールを import してください:
from Boinc import databaseデータベースに接続します:
database.connect_default_config()id でオブジェクトを検索するために、'[ ]'オペレータを使って テーブル・クラスに添え字をつけることができます。 例えば以下のとおり。
# 問い合わせ 'select * from project where id=1' の実行。 # 該当する project が見つからなければ、例外があがる。 project_with_id_1 = database.Projects[1]テーブルクラスのもつ
find 関数は、
引数にしたがって MySQL の問い合わせを作成・実行します:
# このコードは、不定の個数 (0, 1, 2, ...)のプラットフォームを返却する。
# 以下の問い合わせを実行する
# 'select * from platform where user_friendly_name="commodore 64"'
#
list_of_platforms_called_c64 = database.Platforms.find(
user_friendly_name = 'Commodore 64')
'find' 関数は引数をいくつでも受け取ることができます。 それらは、
論理積(AND)で結ばれている[複数の条件]として扱われます。
カスタムSQLによる問い合わせ(好きなことができます)のような、
より進んだ使い方については、pydocで見て下さい。
all_apps = database.Apps.find()
finished_yeti_wus = database.Workunits.find(
app = database.Apps.find(name='YETI@home')[0],
assimilate_state = ASSIMILATE_DONE)
オブジェクト(つまり、テーブルの行)は、カラム・データを
メンバーとして持つので、直接それらを読み、変更ができます。
user_quarl = database.users.find(email_addr='quarl@quarl.org')[0] print 'name =', user_quarl.name user_quarl.postal_code = 97404新しいデータベース・オブジェクトを生成するには、 Pythonのオブジェクトを作って、その初期化メソッドに 全ての値を引数として与えます:
new_app = database.App(name='SPAGHETTI@home',
min_version=1,
create_time=time.time())
新オブジェクトの作成を含め、[データベースへの] 何らかの変更を確定させる
には、 commit() を呼び出して下さい。
( boinc/tools/add.py というツールは、
この機能へのコマンドライン・インタフェースなのです):
user_quarl.commit() # UPDATE の実行 new_app.commit() # INSERT の実行オブジェクトを[データベースから] 削除するには、
remove() を呼び出してください:
team_eric_test = database.Teams(name="Eric's Test Team")[0]
team_eric_test.remove()
# OR
for team in database.Teams(name="Eric's Test Team"):
team.remove()
# OR
map(database.Team.remove,database.Teams(name="Eric's Test Team"))
idで関連づけられたオブジェクトにアクセスするには、
そのフィールド名に "id" サフィックスをつけないでアクセスします:
( result テーブルには、'workunitid' と
'hostid' というカラムがあり、
host テーブルには userid という
カラムがあります)
wu_1234 = database.Workunits.find(name='1234.wu')[0]
results_of_wu_1234 = database.Results.find(workunit=wu_1234)
for result in results_of_wu_1234:
os.system("echo 'you are crunching %s' | mail '%s'" %(
result.name, result.host.user.email_addr))
| [データベースの] テーブル名 | Pythonでのテーブルオブジェクト | Pythonでの行オブジェクトのクラス |
|---|---|---|
| project | Projects | Project |
| platform | Platforms | Platform |
| core_version | CoreVersions | CoreVersion |
| app | Apps | App |
| app_version | AppVersions | AppVersion |
| user | Users | User |
| team | Teams | Team |
| host | Hosts | Host |
| workunit | Workunits | Workunit |
| result | Results | Result |
| workseq | Workseqs | Workseq |
最終更新時刻 00:50:28, 2006年08月12日(JST)
Copyright © 2009 University of California.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License,
Version 1.2 or any later version published by the Free Software Foundation.
Copyright © 2009 Komori Hitoshi(je2bwm at jarl.com).
Japanese translation from English web pages on BOINC.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License,
Version 1.2 or any later version published by the Free Software Foundation.