как распараллелить работу с массивом данных
есть цикл for, который пробегается по огромному массиву. время работы не радует, но имею идею, как упростить это всё. как можно реализовать чтобы параллельно выполнялся цикл for до середины массива, а вместе с ним, цикл с середины и до конца, чтобы сократить время
Ответы (1 шт):
Автор решения: n1tr0xs
→ Ссылка
Есть два общих случая (для примера взял функцию возведения числа в квадрат):
- Ваша функция обрабатывает массив.
from threading import Thread
long_array = list(range(10**3))
def calculate_array(array): # ваша функция для обработки массива
for element in array:
print(f'{element}**2={element**2}')
threads = [
Thread(target=calculate_array, args=(long_array[:len(long_array)//2], )),
Thread(target=calculate_array, args=(long_array[len(long_array)//2:], ))
]
for thread in threads:
thread.start()
for thread in threads:
thread.join()
- Ваша функция обрабатывает отдельный элемент.
from threading import Thread
long_array = list(range(10**3))
def calculate_element(element): # ваша функция обработки элемента
print(f'{element}**2={element**2}')
def calculate_array(array): # пишем обертку для возможности разделения на потоки
for element in array:
calculate_element(element)
threads = [
Thread(target=calculate_array, args=(long_array[:len(long_array)//2], )),
Thread(target=calculate_array, args=(long_array[len(long_array)//2:], ))
]
for thread in threads:
thread.start()
for thread in threads:
thread.join()