Найти - Пользователи
Полная версия: Как прокинуть исключение для остановки скрипта?
Начало » Python для новичков » Как прокинуть исключение для остановки скрипта?
1
Monkey_Dank
Всем добрый день, написал команду для запуска потоков, только как теперь в команде 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()
PEHDOM
Останавливать скрипт исключением? Месье знает толк в извращениях. Это вообще плохая идея.
как остановить поток:
раз 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/
выбирайте что вам больше подходит..
4kpt_V
Потоки вообще-то останавливать не есть гуд. Очень не гуд
Есть статья Светлова на эту тему.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB