私はDjangoにかなり重いコードを持っていて、それを並列化するためにpool.map()を使用しています。
それの非常に些細な内訳は次のようになります:
def addNumbers(server):
conn = Connection(server)
return conn.something.something
def home(request):
c = {}
pool = Pool(processes=4)
c['myResult'] = pool.map(addNumbers, servers)
pool.close()
return render_to_response('homepage.html', c, context_instance=RequestContext(request))
ホームビューはaddNumbersを呼び出し、一部のデータをページに戻します。
ただし、のような関数addNumbers
が巨大になると、必然的にバグを記述し、次のエラーメッセージが表示されます。
/usr/lib/python2.6/site-packages/Django-1.4.3-py2.6.egg/django/core/handlers/base.py
get_response response = callback(request、* callback_args、** callback_kwargs)..。
▶ Local vars /path-to-my-views/views.py in home c['myResult'] = pool.map(addNumbers, servers) ... ▶ Local vars /usr/lib64/python2.6/multiprocessing/pool.py in map return self.map_async(func, iterable, chunksize).get() ... ▶ Local vars /usr/lib64/python2.6/multiprocessing/pool.py in get raise self._value ... ▶ Local vars
これは、並列化されている関数のどこかにバグがあることを示していますが、通常のエラーメッセージのように、実際にはバグがどの行にあるかはわかりません。
非常に苛立たしい、誰もがアイデアを持っています(「より良いコードを書く」以外):P)