Уведомления

Группа в Telegram: @pythonsu

#1 Май 10, 2017 14:29:06

Monkey_Dank
Зарегистрирован: 2016-02-16
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

Как прокинуть исключение для остановки скрипта?

Всем добрый день, написал команду для запуска потоков, только как теперь в команде 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()

Офлайн

#2 Май 11, 2017 00:43:34

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Как прокинуть исключение для остановки скрипта?

Останавливать скрипт исключением? Месье знает толк в извращениях. Это вообще плохая идея.
как остановить поток:
раз http://stackoverflow.com/questions/323972/is-there-any-way-to-kill-a-thread-in-python
два http://stackoverflow.com/questions/18018033/how-to-stop-a-looping-thread-in-python
три http://www.xavierdupre.fr/blog/2013-11-02_nojs.html
четыре http://python.su/forum/topic/23378/
выбирайте что вам больше подходит..



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Офлайн

#3 Май 12, 2017 13:07:09

4kpt_V
От: Харьков
Зарегистрирован: 2017-02-19
Сообщения: 299
Репутация: +  12  -
Профиль   Отправить e-mail  

Как прокинуть исключение для остановки скрипта?

Потоки вообще-то останавливать не есть гуд. Очень не гуд
Есть статья Светлова на эту тему.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version