<Python> マルチスレッド
ちょっとだけ処理を早くしたいので、マルチスレッドmultithread
をやってみた。
In [36]: import threading In [37]: def bbb(x): ...: for i in range(1,1000): ...: i = i + x ...: print(i) ...: In [38]: t = threading.Thread(target=bbb(2)) 1001
とやれば、手っ取り早く関数bbb
をマルチスレッドで発行できるが、戻り値を受け取ることができないっぽい。
戻り値がほしい場合、クラスclass
を作るっぽい。
ついでにスレッドthread
を10個ほど作ってリストにして、順次発行する処理を試してみた。
In [45]: class SampleThread(threading.Thread): ...: def __init__(self,i): ...: super(SampleThread, self).__init__() ...: self.i = i ...: def run(self): ...: self.i = self.i + 1 ...: In [46]: t = SampleThread(50) In [47]: t.start() In [48]: t.i Out[48]: 51 In [49]: l = list() In [50]: for i in range(10): ...: t = SampleThread(i) ...: l.append(t) ...: In [51]: l Out[51]: [<SampleThread(Thread-11, initial)>, <SampleThread(Thread-12, initial)>, <SampleThread(Thread-13, initial)>, <SampleThread(Thread-14, initial)>, <SampleThread(Thread-15, initial)>, <SampleThread(Thread-16, initial)>, <SampleThread(Thread-17, initial)>, <SampleThread(Thread-18, initial)>, <SampleThread(Thread-19, initial)>, <SampleThread(Thread-20, initial)>] In [52]: for v in l: ...: v.start() ...: In [53]: for v in l: ...: print(v.i) ...: 1 2 3 4 5 6 7 8 9 10
うまくいった。 なるほどね。
マニュアル
17.1. threading — スレッドベースの並列処理 — Python 3.5.1 ドキュメント
いつものごとく、Stackoverflow
ちなみに、できたスクリプトは、
time hage.py
で、手っ取り早く測定できる。