def loop(self): while True: try: # получаем id`шники записей из БД рандомно для того чтобы не # получать одни и теже записи, которые не могут быть отправлены rids = [record.id for record in Message.select().order_by(Random()).limit(10)] except PeeweeException as e: # если что-то полшло не так # пропускаем текущую итерацию log.error(e) continue # перебираем все id`шники for rid in rids: try: message = Message.get(Message.id == rid) with db.transaction(): # удаляем запись по id Message.delete().where(Message.id == rid).execute() # выполняем отправку сообщения self.smtp_conn.send(message.to, message.frm, message.body, message.topic) except (OSError, TypeError, PeeweeException, SMTPException) as e: log.error(e) continue sleep(self.sleep_time)
from humandaemon import Hudaemon if __name__ == "__main__": daemon = Hudaemon('/tmp/pid') if len(sys.argv) == 2: if sys.argv[1] == 'start': daemon.start() elif sys.argv[1] == 'stop': daemon.stop() elif sys.argv[1] == 'restart': daemon.restart() elif sys.argv[1] == 'status': print(daemon.status()) sys.exit(0) elif sys.argv[1] == 'total': print(Message.select().count()) elif sys.argv[1] == 'clear': was = Message.select().count() Message.clear() now = Message.select().count() print("was %s - now - %s" % (was, now)) else: print("Unknown command") sys.exit(2) sys.exit(0) else: print("usage: %s start|stop|restart|status|clear|total" % sys.argv[0]) sys.exit(2)