Первый (формат) выглядит лучше мне. Это более читаемо, и Вы не создаете дополнительные временные строковые объекты.
Мне кажется, что вам нужен метод map в многопроцессорной обработке.Pool () :
map (func, iterable [, chunksize])
A параллельный эквивалент встроенной функции map () (поддерживает только хотя один итеративный аргумент). Блокирует, пока не будет готов результат. Этот метод разбивает итерируемый объект на несколько частей, которые он отправляет в пул процессов как отдельные задачи. (Приблизительный) размер этих фрагментов может быть задается установкой chunksize в положительное целое
Например, если вы хотите отобразить эту функцию:
def f(x):
return x**2
в диапазон (10), вы можете сделать это, используя встроенную функцию map ():
map(f, range(10))
или используя метод объекта multiprocessing.Pool () map ():
import multiprocessing
pool = multiprocessing.Pool()
print pool.map(f, range(10))