ぷろぐら×でざいん

Pythonで並列処理をThreadingでやってみる

Pythonで並列処理をThreadingでやってみる

概要

基本、プログラムは上から下へ動作します。しかし、並列処理をすることで前の処理が終わっていない状態で次の処理を行わせることができるようになり、全く同様の処理を並列処理で時間短縮させて行わせることや、基本プロセスから処理を外すことで基本プロセスの保守性を保つことに使われています。


並列処理していない場合

A >> B >> C >> Finish All と出力されるプログラムになっています。

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

import time


def thread_test(time_range, out_put):
    time.sleep(time_range)
    print 'finish process: {}'.format(out_put)


def run(time_range, out_put):
    thread_test(time_range, out_put)


run(10, 'A')
run(5, 'B')
run(7, 'C')
print 'Finish All'

結果

finish process: A
finish process: B
finish process: C
Finish All

並列処理する場合

3つの処理が別々に走ることで、一番最初に Finish AllがPrintされる仕組みになっています。
その後、Sleepする時間が短い順に B >> C >> Aと出力されます。

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

import threading
import time


def thread_test(time_range, out_put):
    time.sleep(time_range)
    print 'finish process: {}'.format(out_put)


def run(time_range, out_put):
    threading.Thread(target=thread_test, args=(time_range, out_put)).start()


run(10, 'A')
run(5, 'B')
run(7, 'C')
print 'Finish All'

結果

Finish All
finish process: B
finish process: C
finish process: A

並列処理を使うべきではない処理

データの整合性が非常に重要な処理などを並列処理してしまうことで、データの整合性が担保できなかったり、予期せぬ結果を作ってしまうことがあります。またエラーをしっかりとトラックしたい処理などには利用しない方が良いと思います。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です