Как заставить функцию выполняться x раз параллельно в Python/Django? [закрыто]
Я немного новичок в асинхронности в python. Мне нужна помощь, чтобы решить возникшую у меня проблему. Я хочу, чтобы функция выполнялась х раз параллельно (или асинхронно), не дожидаясь завершения каждого предыдущего процесса перед запуском следующего.
Я разрабатываю веб-приложение на Python в Django 3.2.7. Оказалось, что я создал скрипт, который выполняет автоматизацию (называется Catalina). В интерфейсе я задаю на форме количество раз, которое должна выполнить эта автоматизация.
Это мой forms.py, где я прошу запустить автоматизацию и указать количество ее запусков:
class Task_Form(forms.Form):
TASKS = (("1", "Catalina"),
("2", "Nosis"),)
task = forms.ChoiceField(choices = TASKS,
widget=forms.Select(attrs={'class': 'form-select'}))
number_processes = forms.IntegerField(widget=forms.NumberInput({
'class': 'form-control',
'placeholder': '1'
}))
Я обнаружил, что в задней части, в views.py у меня есть следующее:
def load_task(request):
"""Renders the test page."""
assert isinstance(request, HttpRequest)
if request.method == 'POST':
form = forms.Task_Form(request.POST, request.FILES)
if form.is_valid():
select = form.cleaned_data['task']
number_processes = form.cleaned_data['number_processes']
if select == '1':
for i in range(number_processes):
catalina.start()
#elif select == '2':
# nosis.start(form.cleaned_data['archivo'])
else:
form = forms.Task_Form()
return render(request,'app/loadfile.html', {
'form': form,
'title': 'Load File',})
В предыдущем коде я создаю цикл for, который будет повторяться x раз в зависимости от числа, которое вводит пользователь. Проблема в том, что это выполняется синхронно, поэтому пока функция catalina.start() не завершит первый раунд for, я не смогу перейти ко второму. Мне нужно, чтобы независимо от того, завершаю я выполнение catalina.start() в первый раз или нет, следующие функции выполнялись асинхронно. Я исследовал asyncio, но из-за своей неопытности не смог решить свою проблему. Мне нужна помощь, чтобы заставить эту функцию запускаться х раз параллельно, не дожидаясь завершения предыдущей функции.