thắc mắc [Python] Hỏi về deploy Flask

karu88

Member
Em có làm 1 cái Flask App để test như sau:

Python:
from flask import Flask, request
import time


# http server
app = Flask(__name__)


server_dict = dict()
server_status_dict = dict()


@app.route('/<ip>')
def report(ip):
    server_dict[ip] = time.time()
    return "ok" + ":"+ip + ":"+str(time.time())

@app.route('/check')
def check():
    for server in server_dict:
        difference = time.time()-server_dict[server]
        if difference < 120:
            server_status_dict[server]= "ok" + ":"+str(difference)
        elif difference > 172800:
            del server_status_dict[server]
        else:
            server_status_dict[server]= "fail" + ":"+str(difference)
    message =''
    for item in server_status_dict:
        message =  message+ f'{item}:{server_status_dict[item]}<br>'
    return message   


# main function
if __name__ == '__main__':   
    # start server
    app.run(host='0.0.0.0', port=1111)

Em deploy cái này trên VPS Centos7 bằng 2 cách:
Cách 1, đánh lệnh python3.7 test.py để chạy trực tiếp
Cách 2, deploy với gunicorn + Nginx

Sau đó em dùng code sau để test:

Python:
import requests

for i in range(100):
    requests.get(f'http://domain.com/{i}')

print("done 1")


for i in range(100):
    requests.get(f'http://server_IP:1111/{i}')

print("done 2")
Với cách deploy 1 thì code chạy ok. Lúc vào http://server_IP:1111/check nó in ra đủ 100 dòng của cái server_status_dict
Còn với cách deploy 2 thì chạy bị lỗi. Lúc vào http://domain.com/check lúc nó in ra 10 dong, lúc 20, lúc 30, lung tung cả lên. Giống như nó có nhiều phiên bản của server_status_dict. Em đang đoán là nó đang bị lỗi ở threadsafe.
Bác nào rành cái này tư vấn em với.
Em cảm ơn
 

karu88

Member
Đây là kết quả của cách deploy 1, đủ 100 entry

Code:
0:fail:759.2570543289185
1:fail:758.8786942958832
2:fail:758.5069346427917
3:fail:758.1351449489594
4:fail:757.7596881389618
5:fail:757.3863341808319
6:fail:757.010666847229
7:fail:756.6381704807281
8:fail:756.2622804641724
9:fail:755.8862257003784
10:fail:755.5146560668945
11:fail:755.1291973590851
12:fail:754.7365326881409
13:fail:754.356516122818
14:fail:753.981279373169
15:fail:753.6054089069366
16:fail:753.2138450145721
17:fail:752.818380355835
18:fail:752.4382960796356
19:fail:752.0667576789856
20:fail:751.7003827095032
21:fail:751.3132452964783
22:fail:750.9238367080688
23:fail:750.5513446331024
24:fail:750.1771302223206
25:fail:749.7979047298431
26:fail:749.4190459251404
27:fail:749.0481917858124
28:fail:748.6672575473785
29:fail:748.2830848693848
30:fail:747.909416437149
31:fail:747.5357480049133
32:fail:747.1593079566956
33:fail:746.7837409973145
34:fail:746.3994252681732
35:fail:746.0265593528748
36:fail:745.6520500183105
37:fail:745.2793860435486
38:fail:744.904794216156
39:fail:744.5288579463959
40:fail:744.1554877758026
41:fail:743.7802364826202
42:fail:743.4038217067719
43:fail:743.0015366077423
44:fail:742.616055727005
45:fail:742.2241225242615
46:fail:741.8492274284363
47:fail:741.4703538417816
48:fail:741.0822536945343
49:fail:740.7089433670044
50:fail:740.3415608406067
51:fail:739.9651212692261
52:fail:739.5690467357635
53:fail:739.1705968379974
54:fail:738.7934353351593
55:fail:738.4151468276978
56:fail:738.0353343486786
57:fail:737.6413230895996
58:fail:737.2650125026703
59:fail:736.8714530467987
60:fail:736.4966006278992
61:fail:736.1160485744476
62:fail:735.7190825939178
63:fail:735.3462533950806
64:fail:734.9714226722717
65:fail:734.5957586765289
66:fail:734.2199065685272
67:fail:733.8420522212982
68:fail:733.4598708152771
69:fail:733.0775439739227
70:fail:732.6989419460297
71:fail:732.3187139034271
72:fail:731.9392898082733
73:fail:731.5633845329285
74:fail:731.1846008300781
75:fail:730.8096714019775
76:fail:730.4323663711548
77:fail:730.0437717437744
78:fail:729.6707744598389
79:fail:729.2912459373474
80:fail:728.8956272602081
81:fail:728.5194237232208
82:fail:728.1444211006165
83:fail:727.7692551612854
84:fail:727.3844618797302
85:fail:727.0075929164886
86:fail:726.612667798996
87:fail:726.2140853404999
88:fail:725.8366258144379
89:fail:725.4668595790863
90:fail:725.080512046814
91:fail:724.7128283977509
92:fail:724.3402450084686
93:fail:723.9593863487244
94:fail:723.5851843357086
95:fail:723.2059574127197
96:fail:722.802404165268
97:fail:722.40824842453
98:fail:722.0141706466675
99:fail:721.6389377117157
 

karu88

Member
Còn đây là kết quả của cách deploy 2. Mỗi lần vào url check là nó cho 1 kết quả khác nhau

Code:
0:fail:780.1568698883057
4:fail:778.6187407970428
6:fail:777.8681375980377
9:fail:776.739280462265
13:fail:775.2384984493256
15:fail:774.4248764514923
19:fail:772.897510766983
22:fail:771.7576985359192
25:fail:770.6321122646332
28:fail:769.4517879486084
31:fail:768.3453030586243
34:fail:767.2020778656006
37:fail:766.0453197956085
40:fail:764.8815402984619
43:fail:763.7402126789093
46:fail:762.5828747749329
Code:
2:fail:933.5209627151489
5:fail:932.381462097168
8:fail:931.2705476284027
11:fail:930.1319863796234
14:fail:928.9525971412659
17:fail:927.8257281780243
20:fail:926.6680727005005
23:fail:925.52357172966
26:fail:924.3903162479401
29:fail:923.2299783229828
32:fail:922.1214139461517
35:fail:920.9716517925262
38:fail:919.8139469623566
41:fail:918.6542329788208
44:fail:917.4981758594513
49:fail:915.6011772155762
52:fail:914.4491722583771
55:fail:913.3037941455841
57:fail:912.5475940704346
60:fail:911.3949015140533
63:fail:910.2668166160583
66:fail:909.0790627002716
69:fail:907.9311220645905
72:fail:906.7688360214233
75:fail:905.6284246444702
78:fail:904.4418053627014
81:fail:903.3151605129242
84:fail:902.1462454795837
87:fail:901.0070474147797
90:fail:899.8155274391174
93:fail:898.6793489456177
95:fail:897.9256391525269
99:fail:896.4008932113647
Code:
1:fail:921.9318099021912
3:fail:921.1611452102661
7:fail:919.6703181266785
10:fail:918.5347318649292
12:fail:917.7897138595581
16:fail:916.225084066391
18:fail:915.4633474349976
21:fail:914.3104465007782
24:fail:913.179178237915
27:fail:912.0098946094513
30:fail:910.8887379169464
33:fail:909.7555615901947
36:fail:908.5938191413879
39:fail:907.4379546642303
42:fail:906.2800447940826
45:fail:905.1350018978119
48:fail:904.0127165317535
51:fail:902.8694415092468
54:fail:901.7094655036926
56:fail:900.9421105384827
59:fail:899.8095760345459
64:fail:897.9108822345734
67:fail:896.7274458408356
70:fail:895.5657374858856
73:fail:894.4212329387665
76:fail:893.2553315162659
79:fail:892.0883991718292
82:fail:890.9417190551758
85:fail:889.7973966598511
88:fail:888.6287376880646
91:fail:887.465838432312
94:fail:886.3241465091705
97:fail:885.1911075115204
47:fail:762.2147171497345
50:fail:761.0743057727814
53:fail:759.9216091632843
58:fail:758.0267996788025
61:fail:756.8772687911987
62:fail:756.50257563591
65:fail:755.3450303077698
68:fail:754.1771821975708
71:fail:753.018652677536
74:fail:751.8644454479218
77:fail:750.699999332428
80:fail:749.5454051494598
83:fail:748.3794937133789
86:fail:747.2400062084198
89:fail:746.0656597614288
92:fail:744.9108459949493
96:fail:743.399445772171
98:fail:742.6461365222931
 

tjeuphi

Member
cái đoạn code test thì trong vòng lặp for thì sau mỗi request phải tạm ngưng chứ ai lại request 100 lần liên tục k nghỉ, chèn import time; time.sleep(.1); vào xem xao

via theNEXTvoz for iPhone
 

karu88

Member
cái đoạn code test thì trong vòng lặp for thì sau mỗi request phải tạm ngưng chứ ai lại request 100 lần liên tục k nghỉ, chèn import time; time.sleep(.1); vào xem xao

via theNEXTvoz for iPhone
Em test performance của cái flask ấy thím. Vậy mới lòi ra lỗi
 
Top