#python #multiprocessing
#python #многопроцессорная обработка
Вопрос:
У меня нулевой опыт работы с многопроцессорной обработкой, но я пытаюсь применить его к этой функции.
def overlap_check(x,y,z,radius,N):
problematic=[]
for pair in combinations(range(N),2):
distance=sqrt((x[pair[0]]-x[pair[1]])**2 (y[pair[0]]-y[pair[1]])**2 (z[pair[0]]-z[pair[1]])**2)
if distance<2*radius:
problematic.append(pair[0])
return list(set(problematic))
Чтобы объяснить, что это делает, я в основном создал N сфер с радиусом R, случайным образом распределенных в трехмерном пространстве. (x, y, z) — это список координат центра. Эта функция проверяет наличие сфер, которые перекрываются друг с другом, сравнивая расстояние между всеми сферами с помощью цикла for. Если есть перекрытие, то сфера сохраняется в «проблемный», который преобразуется в set () и обратно в list(), чтобы стереть любое повторение.
Я был бы признателен за любые предложения.
Комментарии:
1. Вы можете ускорить это, используя понимание списка. Многопроцессорность кажется мне немного недостойной в этом сценарии.
2. Какие расследования
multiprocessing
вы провели? Какие доступные шаблоны, по-видимому, соответствуют вашим требованиям?3. @PApostol какого рода понимание списка?
4. @quamrana, боюсь, не так много. Кажется, я где-то читал, что пул полезен для циклов for. В основном я хочу, чтобы код выполнялся через цикл for как можно быстрее, и мне было интересно, может ли мне помочь многопроцессорная обработка
5. Да,
map
может помочь вам выполнить1:1
преобразование каждого элемента коллекции в другую коллекцию, но с использованием нескольких ядер для обеспечения реальных одновременных вычислений. (Вам пришлось бы опубликовать процесс, чтобы отфильтровать результаты, которые не применяются).