Как прокинуть исключение для остановки скрипта? - 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()

Код к задаче: «Как прокинуть исключение для остановки скрипта? - Python»

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()

8   голосов, оценка 4.000 из 5


СОХРАНИТЬ ССЫЛКУ
Похожие ответы