Trong ứng dụng của tôi, trạng thái của một đối tượng chung được thay đổi bằng cách đưa ra yêu cầu và phản hồi phụ thuộc vào trạng thái.
class SomeObj():
def __init__(self, param):
self.param = param
def query(self):
self.param += 1
return self.param
global_obj = SomeObj(0)
@app.route('/')
def home():
flash(global_obj.query())
render_template('index.html')
Nếu tôi chạy điều này trên máy chủ phát triển của mình, tôi mong đợi nhận được 1, 2, 3, v.v. Nếu các yêu cầu được thực hiện đồng thời từ 100 khách hàng khác nhau, có thể xảy ra sự cố không? Kết quả mong đợi sẽ là 100 khách hàng khác nhau, mỗi khách hàng nhìn thấy một số duy nhất từ 1 đến 100. Hoặc điều tương tự sẽ xảy ra:
- Khách hàng 1 truy vấn.
self.param
được tăng thêm 1. - Trước khi câu lệnh return có thể được thực thi, luồng chuyển sang máy khách 2.
self.param
được tăng trở lại. - Chuỗi chuyển trở lại máy khách 1 và máy khách được trả lại là số 2, chẳng hạn.
- Bây giờ luồng di chuyển đến khách hàng 2 và trả về khách hàng số 3.
Vì chỉ có hai khách hàng, kết quả mong đợi là 1 và 2, không phải 2 và 3. Một số đã bị bỏ qua.
Điều này có thực sự xảy ra khi tôi mở rộng ứng dụng của mình không? Tôi nên xem những lựa chọn thay thế nào cho một biến toàn cục?