動画変換などのCPU時間のかかる処理を複数コアで並列処理すれば効率的だという話。例えばIntelのCore 2 Duoの場合、常に2プロセス走っていればシングルの半分の時間で済む。というわけでPythonでやってみた。   Pythonではthreading.ThreadとBoundedSemaphoreを使って制御するのが楽そうだ。プロセスの実行はsubprocess.Popenを使う。    ここでは、複数のAVI動画ファイルを mencoder を使ってMPEGファイルに変換してみる。まず、Threadクラスを継承したMyThreadクラスを作る。また、BoundedSemaphoreで同時に実行するプロセス数を指定する。とりあえずコア数と同じ2とした。そして動画ファイル分だけMyThreadのインスタンスを作り実行する。これだけ。ちなみにセマフォではwith文を使っているがPythonのバージョンが2.5未満であればaquire/releaseに置き換えること。   実際にCore 2 Duoを積んだPCで6つの動画ファイルを変換したところ、1プロセスでは118秒かかったが2プロセス同時では60秒で済んだ。最近ではマルチコア、メニーコア全盛なのでこういった工夫は必要不可欠になってきている。   本エントリの最後にソースコードを示す。ファイル名をmy_thread.pyとすると、   my_thread.py *.avi   のように実行する。   #!/usr/bin/env python  from __future__ import with_statement import sys, os, glob, subprocess, threading, time  pool_sema = threading.BoundedSemaphore(2)  class MyThread(threading.Thread):     def __init__(self, filename):         self.filename = filename         threading.Thread.__init__(self)     def run(self):         with pool_sema:             self.log = ...