3274029 ランダム
 HOME | DIARY | PROFILE 【フォローする】 【ログイン】

傀儡師の館.Python

傀儡師の館.Python

【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! --/--
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x

PR

Recent Posts

Calendar

Keyword Search

▼キーワード検索

Category

Archives

2023.12
2023.11
2023.10
2023.09
2023.08

Freepage List

Profile

kugutsushi

kugutsushi

Free Space

設定されていません。
2007.10.29
XML
カテゴリ:Python
Krishna G PaiUnderstanding Threading in Python を読む。2004年10月に書かれたものでちょっと古いが、たまたま検索で引っかかってきたのでメモ。構成は次の通り。中身を見てみると、ちょっと古い。2.1 Locks に この例の場合 time.sleep(sleeptime) を外すと、Thread No:1 が延々続くような表示になってしまうと書かれているが、今はちゃんと動くようになっている等。Python 2.4 で変わったのかな(記事が書かれたのは Python 2.3.4 の時代)。

  1. Why Threading in Python?
  2. The Basics

    1. Locks

  3. The Global Interpreter Lock
  4. Using the Threading Module

    1. Using the Threading Library
    2. The Thread Object
    3. Profiling Threaded Code.
    4. Condition, Event and Queue Objects.


Python ライブラリリファレンス: 7.4 thread -- マルチスレッドのコントロール のあたりも参照。Tutorial on Threads Programming with Python (Norman Matloff and Francis Hsu) が詳しい。

Wing IDE 2.x などスレッドを使ったプログラムに対応していない統合環境を使うと、赤文字の部分にブレークポイントを仕掛けても、止まってくれない。ということで、こうしたプログラムをデバグするためには、例えば Wing IDE 3.x を使う必要がある。

#!/usr/bin/env python

import time
import thread

def myfunction(string,sleeptime,*args):
while 1:
print string
time.sleep(sleeptime) #sleep for a specified amount of time.

if __name__=="__main__":
thread.start_new_thread(myfunction,("Thread No:1",2))

while 1:pass


他の IDE もちょっと使ってみるかなということで、Python の統合開発環境 (IDE: Integrated Development Environment) PyScripter を試してみる。PyScripter 自体は Delphi で書かれている。Python開発統合環境の決定版! PyScripter(for Windows)の紹介 に日本語の詳しい説明がある。マルチスレッドは非対応のようだ。とりあえず、見てみる。

オフィシャルリリースは PyScripter のダウンロード から入手できる。開発版については PyScripter Development Site を見ると、PythonScripter Version 1.9.4 が最新。最新版では remote debugging に対応しているようだ。Debugging django with PyScripter のような用途にも使えるということだ。

リモートデバグを行うためには、RPyC (remote python call) が必要で、Rpyc (sourceforge) からダウンロードしてインストールしておく必要がある。Remote Tk や Remote Wx を使えば、Tk や wxPython で書かれた GUI プログラムもメインループをダミー関数に置き換えてしまうことによってデバグしやすくなるようだ。(PyScripter Python Engines)。まあ、この Rpyc って、使い方を間違えなければ便利でおもしろそうな感じだが、リモートで動いている Python のインタプリタに対して透過的にアクセスできるようにするものなので セキュリティをちゃんと考えてあげない と危険なところもあるので注意かな。これはおもしろい。時間がかかる処理とか、他のマシンにやらせるとかでも簡単に書ける。ただし、やっぱり、外部からはアクセスできないようにセキュリティをちゃんとしておかないとかなりまずい。なんでもできちゃう。

Rpyc のデモをちょっとやってみる。Rpyc はダウンロードしたファイルを解凍して、lib/site-package に放り込めば OK。次に、Rpyc/Servers にあるサーバをどれか動かしておく (servers に説明がある)。そして、Rpyc/Demo/testsuite.bat を動かすと、デモが次々に起動される。注意点としては、/tmp のディレクトリがないとエラーになるので、Windows で実行するときはあらかじめディレクトリを作成しておくこと。サーバのポートは、./Utils/Serving.py で DEFAULT_PORT = 18812 のように設定されているので、ファイアーウォール等でポートを塞いでいる場合は開けておくこと。デモでどういうことをやっているかはここに説明がある。その他、ドキュメントは RPyC documentation center を参照。

PyScripter は Using PyScripter with Portable Python を見ると portable PythonMovable Python にも対応しているようで、次のようにすれば、PortablePython のデバグに使えるようだ。複数のバージョンの Python をインストールしているとき、こういうことができると便利。Python2.4 用、Python 2.5 用といった具合に Python の環境によって起動用のバッチファイルでも用意しておけばいいかもしれない。

SET PYTHONHOME=E:\PortablePython
PyScripter --PYTHON25 --PYTHONDLLPATH "E:\PortablePython" %1 %2 %3 %4 %5

でも、やっぱり PyScripter は現状、マルチスレッドプログラミングには使えない。RPyc を使ってリモートで動かすようにしてブレークポイントをしかけても止まってくれない。動き続けるようなものを動かすと、Stop で止めることもできなくなる。このあたりのできは、Wing IDE の方がいい。Wing IDE は、2.x ではマルチスレッドプログラムのデバグには対応していないが 3.x では対応している。

SPE IDE - Stani's Python Editor はどうかなとみてみると、WinPdb debugger 1.0.9 が SPE の subversion にあるソースでは使われるようになったようだ ので、マルチスレッド対応になったようだ。wxGlade にも対応してる。

実際に SPE で WinPdb を使ったデバグをしてみると、SPE のウィンドウとは独立して Winpdb が起動するのね。Rpyc のようにリモートでインタープリタを動かす rpdb2 の黒い窓と、Winpdb のウィンドウが起動する。

WinPdb はプラットフォームに依存しない Python デバッガでマルチスレッド対応。pdb に比べて 20倍高速なようだし GUI で動くのがよい感じ。Winpdb - About にスクリーンショットがある。Ubuntu と Windows XP で動作が確認されているようだ。

spe の最新版を使うには、How to download the latest SPE from subversion にあるように Subversion のソースをダウンロードして、_spe ディレクトリで SPE.py を実行すればいい。wxPython はあらかじめインストールしておく。

svn checkout svn://svn.berlios.de/python/spe/trunk/_spe
cd _spe
python SPE.py


画面はこんな感じ。けっこう使える。いいかもしれない。

SPE の画面
SPE.JPG

WinPdb の画面
winpdb.JPG

rpdb2 の画面
rpdb2.JPG

考えてみたら、PyScripter でも、[Run] - [External Run] で WinPdb で動かしてデバグできるように指定すればいいじゃん。[Run] - [External Tool Properties] で C:/Python24/Scripts/winpdb.bat とかを指定すれば、F9 で WinPdb が起動するようになる。

無償で使える Python の IDE もかなり進化してきた。

でも、GUI にこだわらなければ、ipython とかで十分だったりして。ちなみに ipython は、Interactive Parallel Computing とかいう方向に進化しているみたい。Cookbook / InterruptingThreads みたいのもできたのね。



なかのひと







お気に入りの記事を「いいね!」で応援しよう

Last updated  2007.10.30 01:35:47
コメント(2) | コメントを書く



© Rakuten Group, Inc.