我在 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)