Многопроцессорный список Python добавляется в цикл for

#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 преобразование каждого элемента коллекции в другую коллекцию, но с использованием нескольких ядер для обеспечения реальных одновременных вычислений. (Вам пришлось бы опубликовать процесс, чтобы отфильтровать результаты, которые не применяются).