Как прокинуть исключение для остановки скрипта? - Python
Формулировка задачи:
Всем добрый день, написал команду для запуска потоков, только как теперь в команде stop реализовать исключение в ф-ции start() чтобы завершить потоки?
Эта команда будет запускаться с помощью supervisor или ей подобной
Листинг программы
- class Command(BaseCommand):
- '''
- Дополнительные команды для старта и остановки потоков,
- manage.py optional start - запускает потоки
- manage.py optional stop - останавливает потоки
- '''
- def add_arguments(self, parser):
- parser.add_argument('command', default=False)
- parser.add_argument('-stop', default=False)
- def handle(self, *args, **options):
- # for i in options:
- # print(i, options[i])
- if options['command'] == 'start':
- self.stdout.write('Scheduled messages is started')
- start()
- if options['command'] == 'stop':
- self.stdout.write('Scheduled messages is stopped')
- def start():
- def message_scheduled(name, event):
- while event.is_set():
- mes = Message.objects.filter(status='scheduled').values('owner_id', 'message_id', 'timestamp')
- # получаем id сообщений которые соответствуют времени отправки
- send_dlist = {i['message_id']: get_token(i['owner_id']) for i in mes if
- i['timestamp'] in range(round(time.time() - 60), round(time.time()))}
- scheduled_req(send_dlist)
- print(send_dlist)
- time.sleep(10)
- def stat(name, event):
- while event.is_set():
- print('<Thread: %s>' % (name))
- collect_stats()
- time.sleep(10)
- try:
- event = threading.Event()
- event.set()
- t1 = threading.Thread(target=message_scheduled, args=('mes', event))
- t2 = threading.Thread(target=stat, args=('stat', event))
- t1.start()
- t2.start()
- while True:
- time.sleep(0.01)
- except KeyboardInterrupt:
- event.clear()
- t1.join()
- t2.join()
Решение задачи: «Как прокинуть исключение для остановки скрипта?»
textual
Листинг программы
- class Command(BaseCommand):
- def handle(self, *args, **options):
- mes = Message.objects.filter(status='scheduled').values('owner_id', 'message_id', 'timestamp')
- # получаем id сообщений которые соответствуют времени отправки
- send_dlist = {i['message_id']: get_token(i['owner_id']) for i in mes if
- i['timestamp'] in range(round(time.time() - 60), round(time.time()))}
- scheduled_req(send_dlist)
- print(send_dlist)
- collect_stats()
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д