플라스크에 대한 안녕하세요 세계 데모입니다 : 내가 지금처럼이를 수정하면 어떻게Flask (WSGI)에서 글로벌 싱글 톤으로 작업 할 때 경쟁 조건에 대해 걱정해야합니까?
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World!"
if __name__ == "__main__":
app.run()
:
from flask import Flask
app = Flask(__name__)
a = 1
b = 2
c = 3
@app.route("/")
def hello():
a += 1
b += a
c += b
return "Hello World!"
if __name__ == "__main__":
app.run()
내가 여러 스레드가있을 수 있습니다 WSGI 응용 프로그램을 이해합니다. hello
함수는 동시에 여러 스레드에서 실행될 수 있으며 경쟁 조건이 있습니다. 이 올바른지? 위 코드가 스레드 안전하지 않은 경우 스레드 안전을 위해 무엇을 할 수 있습니까?
전역을 피하는 것이 가능한 해결책이지만 항상 전역을 피할 수 있습니까? 파이썬 객체 캐시와 같은 것을 원한다면?
from threading import Lock
from flask import Flask
app = Flask(__name__)
a = 1
b = 2
c = 3
lock = Lock()
@app.route("/")
def hello():
with lock:
a += 1
b += a
c += b
return "Hello World!"
if __name__ == "__main__":
app.run()
귀하의 예 (절단 정확히 붙여 넣기), 슈팅을 할당하기 전에 참조하기 때문에, 나를 위해 500을 반환합니다. – jeremyjjbrown
이것은 실제로 명시된 질문에 대답하지 않습니다. 잠그고 잠글까요? 어떤 조건에서? 이것은 GIL이없는 통역사만을위한 것입니까? – Basic