У меня есть список начальных данных. Я хочу применить функцию к начальным данным, которая создает несколько фрагментов новых данных для каждого элемента в начальных данных. Некоторые фрагменты новых данных совпадают, и я хочу их удалить.
Последовательная версия по существу:
def create_new_data_for(datum):
"""make a list of new data from some old datum"""
return [datum.modified_copy(k) for k in datum.k_list]
data = [some list of data] #some data to start with
#generate a list of new data from the old data, we'll reduce it next
newdata = []
for d in data:
newdata.extend(create_new_data_for(d))
#now reduce the data under ".matches(other)"
reduced = []
for d in newdata:
for seen in reduced:
if d.matches(seen):
break
#so we haven't seen anything like d yet
seen.append(d)
#now reduced is finished and is what we want!
Я хочу ускорить это с помощью многопроцессорной обработки.
Я думал, что смогу использовать многопроцессорность. Очередь за поколением.
Каждый процесс просто помещает материал, который он создает, и когда процессы сокращают данные, они могут просто получать данные из очереди.
Но я не уверен, как сократить цикл обработки и изменить его без каких-либо условий гонки или других проблем.
Каков наилучший способ сделать это безопасно? или есть другой способ достичь этой цели лучше?