Для того чтобы одновременно запустить одну и ту же функцию с различными параметрами, вы можете использовать модуль `threading` для создания потоков, а также модуль `concurrent.futures`, который предоставляет более высокий уровень абстракции. Ниже представлены оба варианта.
### Вариант 1: Использование модуля `threading`
```python
import threading
import time
def my_function(param):
print(f"Запускаю функцию с параметром: {param}")
time.sleep(2) # Имитация длительной работы
print(f"Функция с параметром {param} завершила выполнение")
threads = []
for i in range(5): # Запускаем функцию 5 раз с разными параметрами
thread = threading.Thread(target=my_function, args=(i,))
threads.append(thread)
thread.start()
# Ждем завершения всех потоков
for thread in threads:
thread.join()
print("Все функции завершили выполнение.")
```
### Вариант 2: Использование `concurrent.futures`
Этот метод проще и позволяет управлять потоками (или процессами) более удобным способом.
```python
from concurrent.futures import ThreadPoolExecutor
import time
def my_function(param):
print(f"Запускаю функцию с параметром: {param}")
time.sleep(2) # Имитация длительной работы
print(f"Функция с параметром {param} завершила выполнение")
with ThreadPoolExecutor(max_workers=5) as executor:
# Запускаем функцию с различными параметрами
futures = [executor.submit(my_function, i) for i in range(5)]
# Подождем завершения всех задач
for future in futures:
future.result()
print("Все функции завершили выполнение.")
```
### Объяснение
1. **Модуль `threading`:**
- Создаем потоки, передавая целевую функцию и аргументы при создании потока.
- Запускаем каждый поток с помощью метода `start()`.
- Дожидаемся завершения всех потоков с помощью метода `join()`.
2. **Модуль `concurrent.futures`:**
- Используем `ThreadPoolExecutor` для управления пулом потоков.
- Метод `submit()` позволяет отправить функцию с аргументами на выполнение в пул.
- Метод `result()` дожидается завершения выполнения каждого потока и возвращает результат.
Оба способа позволяют одновременно запускать одну и ту же функцию с разными параметрами. Вы можете выбрать тот, который больше подходит для вашей задачи.