Как остановить команду управления django через определенный период времени, используя многопроцессорность?
Мне нужно запустить командную функцию python следующим образом:
from django.core.management import BaseCommand
class Command(BaseCommand):
def add_arguments(self, parser):
parser.add_argument('plant', type=int)
parser.add_argument('month', type=int)
def handle(self,*args,**options):
func= Library_Class()
plants= options.get('plant')
date= options.get('month')
for plant in plants:
result= func.library_function(length,breadth)
return
Этот код передает аргументы библиотечной функции, которая в свою очередь возвращает требуемый вывод. Я хочу остановить эту командную функцию после 100 секунд времени выполнения. Как мне использовать многопроцессорность, чтобы вызвать библиотечную функцию как процесс и завершить программу через 100 секунд?
Я посмотрел документацию multiprocessing docs и пришел к следующему:
from multiprocessing import Pool, TimeoutError
from django.core.management import BaseCommand
def do_da_thing(plants, month):
for plant in plants:
result= func.library_function(plant, month)
class Command(BaseCommand):
def add_arguments(self, parser):
parser.add_argument('plant', type=int)
parser.add_argument('month', type=int)
def handle(self,*args,**options):
func= Library_Class()
plants= options.get('plant')
date= options.get('month')
with Pool(processes=1) as pool:
res = pool.apply_async(do_da_thing, (plants, month))
try:
# block for 100 sec or until we get a reply
result = res.get(timeout=100)
except TimeoutError:
self.stdout.write("took longer than 100 seconds")
return
Я также не тестировал его вообще.