簡単なスレッド処理の実装

前回作ったYoutubeダウンロード処理を並列化するために、
ちと調べてみました。
まあ、ダウンロードは既に終わっているのですが、次回のためにお勉強お勉強。

#! /usr/bin/python
# -*- encoding: utf-8 -*-
from __future__ import unicode_literals
from multiprocessing import Pool
import random
import time 

class Test():
    """並列処理したい処理のクラス"""
    def __init__(self, type_name = "hoge"):
        self.type_name = type_name
    def run(self):
        for i in range(1,random.randint(3, 10)):
            time.sleep(1)
            print "%s :%s %s" %(self.type_name," "*i,i)
        return "%s end" % self.type_name

def make_child(name = "hoge"):
    """子プロセスの生成関数"""
    t = Test(name)
    return t.run()

def make_mother(max_child):
    """並列処理時の親クラス"""
    # プロセスのプールを作成
    p = Pool(max_child)
    # 戻り値のリスト = p.map(子プロセスの生成関数, 子プロセスへの引数のリスト)
    list = p.map(make_child, range(10))
    return list

if __name__ == '__main__':
    print make_mother(4)


上記サンプルだと、理由はよく分からないが、複雑な処理だとエラーになるようです。。。。
現在は以下サイトの自作MyPoolクラスを、改良して使用させて頂いています。

【参考元】Pythonでクラス内の関数を並列演算させる - 技術の切れはし

【少し効率を上げた改良版】簡単なスレッド処理の実装2