Obecnie istnieją dwa sposoby, które ja nazywam jednocześnie (poprzez HTTP w Javie)aplikacja Kolba GET powrocie to samo dwa razy
Z jakiegoś powodu, nie jest przypadek, w którym getAcc() zwraca same informacje o koncie dwa razy ? Nie do końca rozumiem, dlaczego tak jest.
Myślę, że możliwe jest, że drugie wywołanie get_account dzieje się przed wywołaniem metody toggleUse() (dlatego zmienna IN_USE nie jest jeszcze ustawiona na 1). Czy ktoś wie, jak to naprawić? Zrobiłem trochę czytania w sieci i uważam, że jest to serializacja. Widziałem to głównie w odniesieniu do baz danych, ale nie widziałem prawie żadnych referencji, jak "zablokować" metodę. Mógłbym stworzyć zamek i zrobić "z zamkiem", ale słyszałem, że to nie jest droga.
@app.route('/getAcc')
def get_account():
try:
cursor.execute("SELECT USER,PASS FROM ACCOUNTS WHERE TUT_DONE = 0 AND IN_USE = 0 LIMIT 1;")
return jsonify(data=cursor.fetchall())
except (AttributeError, MySQLdb.OperationalError):
open_db()
return get_account()
@app.route('/toggleUse', methods=['POST'])
def toggle_use():
try:
username = request.values['username']
update_stmt = (
"UPDATE ACCOUNTS SET IN_USE = !IN_USE WHERE USER = (%s)"
)
data = (username,)
cursor.execute(update_stmt,data)
db.commit()
return 'Account ' + str(username) + ' IN_USE toggled'
except (AttributeError, MySQLdb.OperationalError):
open_db()
return toggle_use()
Myślę, że tak samo jak Kelvin, sprawdź, czy wyjątek w get_account() nazywa go self. Proponuję użyć debuggera, PyCharm to ładne IDE, które zapewnia kalkulator w trybie debugowania. Możesz pobrać wydanie społeczności (za darmo). Uruchom także kod SQL w MySQL, aby zobaczyć, ile linii jest obliczanych. –
Jakie metody i w jakiej kolejności dzwonisz? – syntonym