我正在使用 Python 脚本来检查用户请求是否存在。 使用:
import MySQLdb
from flask import Flask, request, abort
app = Flask(__name__)
try:
db = MySQLdb.connect('xxx1','my_username','my_password','my_db_name')
db1 = MySQLdb.connect('xxx2','my_username','my_password','my_db_name')
db2=
db3=
except MySQLdb.OperationalError as e:
print "Caught an exception : " + str(.message)
@app.route('/')
@app.route('/<path:path>')
def page(path = ''):
user = request.args.get('user', None)
if not mac:
abort (403)
cursor = db.cursor()
query = 'Select ID from f_member where Name=%s'
db.commit()
cursor execute(query, (user, ))
row = cursor.fetchone()
cursor.close()
#cursor.db1 here
if row == None and row1 == None:
abort (403)
return 'OK', 200
if __name__ == '__main__':
app.run(host=host, port=port)
然后我有 5 个 nginx 服务器:
location = /auth {
proxy_pass http://xxx.xxx$request_uri;
proxy_pass_request_body off;
proxy_set_header Content_Lenght "";
proxy_set_header X-Real-IP $remote_addr;
事情是这样的,这个脚本检查是否在一个中找到了用户 数据库的,如果 true 则访问该页面。 问题是我的用户列表现在已达到 5000 个用户。当我运行 .py 脚本时,它运行得非常快(即使有错误 403 人们试图连接),然后开始出现损坏的管道。 看起来它已经重载了,有没有更好的方法来处理我的脚本,使其运行得更好、更高效?
最佳答案
您可以在 Python 程序中使用字典作为用户名/ID 映射。基本上,当程序启动时,它将查询所有用户并填充 map 。之后,每隔 20 秒左右它就会进行一次查询以获取 f_member 中的“更改”以更新字典。用户名的查找始终发生在该 map 中。如果在 map 中找不到用户名,则仅进行数据库查询(如果在数据库中找到用户详细信息,则也更新本地 map )。 如果表中没有数百万用户,则此方法可行。否则使用 LRU 缓存。
关于Python检查大量请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30441783/