Python检查大量请求

标签 python mysql linux nginx

我正在使用 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/

相关文章:

c - 为什么不能将 linux 服务绑定(bind)到环回?

linux - 如何在我项目的所有功能的enter入口和return指令前加一句。谢谢

python - 我的项目根文件夹中没有名为 "xxx"的模块

带有约束的 Python 列表分块或分页

mysql - 多方加入一对多

php - 为什么我的 php 没有显示任何内容? (包含代码)

linux - Linux 中应用程序可用的内存总量

python - Matplotlib 动画不显示

python - 为子数据帧的第一行分配一个值

mysql - Eclipse DTP 仍然不处理分隔符语句