Форум сайта python.su
Всем добрый день, написал команду для запуска потоков, только как теперь в команде 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()
Офлайн
Останавливать скрипт исключением? Месье знает толк в извращениях. Это вообще плохая идея.
как остановить поток:
раз 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]
Офлайн
Потоки вообще-то останавливать не есть гуд. Очень не гуд
Есть статья Светлова на эту тему.
Офлайн