読者です 読者をやめる 読者になる 読者になる

Python3.2のconcurrent.futuresモジュールを使ってSleep Sort

Python3.2の標準ライブラリを眺めてたら、3.2で新しく追加になったconcurrent.futuresという並列処理用のモジュールが目に止まりました。

16.4. concurrent.futures — Launching parallel tasks — Python v3.2.3 documentation

パッと思いついたのが先週くらい(でしたっけ?)に流行ったスリープソートだったので、練習がてら書いてみました。

import concurrent.futures
import time
import random

workers = 20
random_numbers = [random.randint(1, workers) for i in range(workers)]

def sleep_sort(n):
    time.sleep(n)
    return n

with concurrent.futures.ThreadPoolExecutor(max_workers=workers) as executor:
    future_to_sleep = dict((executor.submit(sleep_sort, num), num)
                           for num in random_numbers)

    for future in concurrent.futures.as_completed(future_to_sleep):
        print(future.result())

やってることは Pythonでスリープソート書いてたら multiprocessing の最小構成サンプルになった - mizchi log とほぼ一緒です。あちらと違ってconcurrent.futuresの良いサンプルとは言いがたいかなぁ…。
ちなみにこのモジュール、Javajava.util.concurrent.Futureに大いに影響を受けてるらしいですよ。Java全然知らないけど。

ところで…

はてなさん、python2.6以降のシンタックスにも対応してください><