- blogs:
- cles::blog
2009/02/25
[ by hsur at 16:12]
PythonでThreadを使う
最近Pythonでガリガリコーディングしているのですが、スレッドを使って平行に処理をしたい部分があったのでthreading.Threadを使ってみることにしました。
クラス Thread( group=None, target=None, name=None, args=(), kwargs={})
コンストラクタは常にキーワード引数を使って呼び出さねばなりません。 各引数は以下の通りです:
group はNone にせねばなりません。 将来ThreadGroup クラスが実装されたときの拡張用に予約されている 引数です。
target はrun() メソッドによって起動される 呼出し可能オブジェクトです。 デフォルトでは何も呼び出さないことを示す None になっています。
nameはスレッドの名前です。デフォルトでは、 N を小さな 10 進数として、Thread-N という形式の一意な名前を生成します。
args はtarget を呼び出すときの引数タプルです。デフォルトは()です。
kwargs はtarget を呼び出すときのキーワード引数の辞書です。デフォルトは{}です。
サブクラスでコンストラクタをオーバライドした場合、必ずスレッドが何かを始める前に基底クラスのコンストラクタ (Thread.__init__()) を呼び出しておかなくてはなりません。
コンストラクタのtargetは呼出し可能オブジェクトでなければならないと書いてあるのですが、Pythonのことをよく理解していなかったため、その意味が分からずにちょっとはまってしまいましたが、オブジェクトに__call__()というメソッドを追加して事なきを得ました。
† コードの例
カウンターをスレッドで複数起動して、最後にThreadの終了を待つというサンプルを書いてみました。いろいろと応用ができそうです。
ThreadSample.py
# -*- coding: utf-8 -*-
import logging
import logging.config
from threading import Thread
import time
class Countdown:
def __call__(self, name, count):
while True:
print name, count
time.sleep(3)
count -= 1
if count < 0:
break
threadCount = 5
counterStart = 5
threads = []
while True:
cd = Countdown()
th = Thread(name=None, target=cd, args=("Thread-%s\t" % threadCount, counterStart) )
th.start()
threads.append(th)
threadCount -= 1
if threadCount < 0:
break
time.sleep(1)
print "Waiting..."
for thread in threads:
thread.join()
print "Done!"
import logging
import logging.config
from threading import Thread
import time
class Countdown:
def __call__(self, name, count):
while True:
print name, count
time.sleep(3)
count -= 1
if count < 0:
break
threadCount = 5
counterStart = 5
threads = []
while True:
cd = Countdown()
th = Thread(name=None, target=cd, args=("Thread-%s\t" % threadCount, counterStart) )
th.start()
threads.append(th)
threadCount -= 1
if threadCount < 0:
break
time.sleep(1)
print "Waiting..."
for thread in threads:
thread.join()
print "Done!"
† 実行結果
Thread-5 5
Thread-4 5
Thread-3 5
Thread-5 4
Thread-2 5
Thread-4 4
Thread-1 5
Thread-3 4
Waiting...
Thread-0 5
Thread-2 4
Thread-5 3
Thread-4 3
Thread-1 4
Thread-3 3
Thread-0 4
Thread-2 3
Thread-5 2
Thread-4 2
Thread-1 3
Thread-3 2
Thread-0 3
Thread-2 2
Thread-5 1
Thread-4 1
Thread-1 2
Thread-3 1
Thread-0 2
Thread-2 1
Thread-5 0
Thread-4 0
Thread-1 1
Thread-3 0
Thread-0 1
Thread-2 0
Thread-1 0
Thread-0 0
Done!
Thread-4 5
Thread-3 5
Thread-5 4
Thread-2 5
Thread-4 4
Thread-1 5
Thread-3 4
Waiting...
Thread-0 5
Thread-2 4
Thread-5 3
Thread-4 3
Thread-1 4
Thread-3 3
Thread-0 4
Thread-2 3
Thread-5 2
Thread-4 2
Thread-1 3
Thread-3 2
Thread-0 3
Thread-2 2
Thread-5 1
Thread-4 1
Thread-1 2
Thread-3 1
Thread-0 2
Thread-2 1
Thread-5 0
Thread-4 0
Thread-1 1
Thread-3 0
Thread-0 1
Thread-2 0
Thread-1 0
Thread-0 0
Done!
このエントリは役に立ちましたか?
トラックバックについて
Trackback URL:
お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
このエントリへのTrackbackにはこのURLが必要です→http://blog.cles.jp/item/2939
Trackbacks
このエントリにトラックバックはありません
Comments
愛のあるツッコミをお気軽にどうぞ。[policy]
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントはありません
Comments Form
コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。
OpenID を使ってログインすることができます。
Copyright © 2004-2010 by CLES All Rights Reserved.
sp-20100316083930644595553@cles.net
sp-20100316083930644595553@cles.net
サイト内検索
おしらせ
検索ワード
- python thread
- Yahoo! - 10/03/13 16:54:17
- python threading
- Google - 10/03/11 02:36:51
- python threading
- Google - 10/03/06 10:52:15
- python threading
- Google - 10/03/04 17:48:41
- python thread 終了
- Google - 10/02/28 22:01:57
- python thread
- Google - 10/02/20 19:08:30
- python thread
- Yahoo! - 10/02/17 19:11:44
Tags [All Tags]
google | php | ruby | windows | firefox | linux | SoftwareEngineering | java | spam | ranking | curry | camera | seo | FireEmblem | thunderbird | server | marketing | mobile | Doctoral | docomo
へぇが多いエントリ [Top 100]
- 時間がたっても変わらないもの (4)
- おめでとうございます (4)
- SourceForge.JPのSubversion... (3)
- 知恵の輪 サターン編 (3)
- 和食 小錦 (3)
- XPathのチートシート (3)
- サーバセットアップ (3)
- .inはインドのccTLDなのか (3)
- Thanks ! 10000 Hit ! (3)
- Waterfallプロセスに返れ? (3)
閲覧数が多いエントリ [Top 100]
1 . ドラゴンクエストVIの影響力 [8801x]
2 . やっぱりあった!パクれる読書感想文! [7339x]
3 . Echofon for Firefox [6192x]
4 . 急性胃腸炎 [5579x]
5 . 芸能人の本名。 [5527x]
2 . やっぱりあった!パクれる読書感想文! [7339x]
3 . Echofon for Firefox [6192x]
4 . 急性胃腸炎 [5579x]
5 . 芸能人の本名。 [5527x]
最新のエントリ [archives]
最新のコメント [Latest 100]
- CD-ROM起動で、HDDを完全消去
- NP_Moblog v1.16
- pinzoro 01/15
- hsur 12/29
- and more...
- 耳がおかしいと思ったら突発..
- baca 01/13
- hsur 01/13
- and more...
カテゴリ別エントリ
cles::blogについて
Syndicate
Calendar
Referrers
Blog People
Admin
★はてな認証APIをつかってログインすることができます。
Powered by NP_Paint




