flask python сделать фоновый поток во время цикла - PullRequest
0 голосов
/ 08 января 2020

Я использую приложение python flask и после долгой борьбы с ошибками, так как я использую базу данных sqlite3, когда более одного пользователя пытались зафиксировать сеанс одновременно с ошибкой, поэтому я решил, что пользователи могут только добавлять и удалять в сеансе, но не фиксировать его, и я хочу, чтобы сеанс автоматически фиксировался в определенное время, скажем, в 12:00, как выполнить проверку фоновой задачи для времени, и когда он находит, что это предоставленное время, он фиксирует сессия? это текущий код для редактирования объекта (как пример) в сеансе

@app.route('/NewRequest', methods=['GET', 'POST'])
@login_required
def NewRequest():
    connUser=session.query(User).filter(User.id==Session.get('user_id')).one()
    if request.method == 'GET':
        Types = session.query(Req_Type.id,Req_Type.Type_name)
        Pr = session.query(Req_Priorities.id,Req_Priorities.Priority_name)
        return render_template('NewRequest.html',conn=connUser ,name=current_user.name, items=Types,priorities=Pr)
    else:
        name= request.form['Name']
        Description= request.form['Description']
        Type = request.form.get('Type')
        Priority = request.form.get('Priority')
        newRequest = Requests(name=name, Record_Created=datetime.now().strftime("%Y-%m-%d %H:%M"), Description=Description, Assigned_To=None, Type_Name=str(Type), Priority_Name=str(Priority), Status_Name='Opened', User_ID=Session.get('user_id') )
        session.add(newRequest)
        flash('New Request With Name %s Successfully Created' % newRequest.name)
        UserRequests= session.query(Requests).filter_by(User_ID=Session.get('user_id')).filter(Requests.Status_Name!='Solved').all()
            return render_template('ReqData.html',conn=connUser , title='User Requests', rows=UserRequests)

Я хочу создать фоновую задачу для проверки, и если время 12:00, она выполняет

session.commit()

так хорошо или нет? и как вы думаете, это приложение будет работать лучше? Будет ли изменение базы данных (возможно, на postgresql) решить проблему одновременных коммитов? я пытался использовать процесс для запуска фона l oop, но он не работает, нужно, чтобы это был поток

1 Ответ

0 голосов
/ 08 января 2020

не уверен, эффективен он или нет, но сейчас он работает

def monitoring_loop():
    while True:
        if datetime.now().strftime("%H:%M:%S")=="12:00:00":
            session.commit()
            print("Committed Changes")
            time.sleep(1)

monitoring_thread = threading.Thread(target = monitoring_loop)
monitoring_thread.daemon=True
monitoring_thread.start()

Я все еще задаюсь вопросом о других базах данных, если кто-то может ответить мне, я буду благодарен

...