免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2102 | 回复: 1

求助:web应用中,对于每次request,都reload一个模块,会不会影响性能? [复制链接]

论坛徽章:
0
发表于 2012-05-08 21:03 |显示全部楼层
在一个flask应用中,我需要用sqlalchemy动态的连接某几个库,而且有时会做新建数据库操作,每次请求都可能是不同的数据库。
每次请求都会reload模块db.py,这样做会不会影响服务器性能?还有其它用sqlalchemy的解决办法么?

main.py
  1. from flask import Flask, render_template, request, session, g, redirect, url_for
  2. from sqlalchemy import create_engine
  3. from sqlalchemy.orm import scoped_session, sessionmaker
  4. from sqlalchemy.ext.declarative import declarative_base

  5. app = Flask(__name__)
  6. app.secret_key = '\x80\xeeW~\x17\x00@\xab\xd41\xe1]\x00I\x92 \xae\x8c\x00\xf6\xc4\xc1F\xdf'

  7. @app.before_request
  8. def before_request():
  9.     if not hasattr(g,'db'):
  10.         g.db = dict()
  11.     if session.has_key('login'):
  12.         db_str = 'mysql://root:qeephp@localhost:3306/%s?charset=utf8' % session['login']
  13.         engine = create_engine(db_str)
  14.         db_session = scoped_session(sessionmaker(autocommit=False,autoflush=False,bind=engine))
  15.         g.db[session['login']] = (engine, db_session)
  16.     else:
  17.         db_str = 'mysql://root:qeephp@localhost:3306/maindb?charset=utf8'
  18.         engine = create_engine(db_str)
  19.         db_session = scoped_session(sessionmaker(autocommit=False,autoflush=False,bind=engine))
  20.         g.db['default'] = (engine, db_session)
  21.     import db
  22.     db = reload(db)
  23.         

  24. @app.route('/')
  25. def index():
  26.     return 'abc'

  27. @app.route('/create')
  28. def create():
  29.     import db
  30.     db = reload(db)
  31.     print db.engine
  32.     db.Base.metadata.drop_all(db.engine)
  33.     db.Base.metadata.create_all(db.engine)
  34.     if session.has_key('login'):
  35.         return 'login'
  36.     else:
  37.         return 'no login'

  38. @app.route('/login')
  39. def login():
  40.     session['login']='abcde'
  41.     return redirect(url_for('create'))

  42. @app.route('/logout')
  43. def logout():
  44.     session.pop('login', None)
  45.     return 'logout'

  46. if __name__ == '__main__':
  47.     app.run(debug=True)
复制代码
db.py
  1. #coding:utf-8
  2. from flask import session, g
  3. from sqlalchemy.ext.declarative import declarative_base

  4. from sqlalchemy import Column, Integer, String, Text, ForeignKey, Table, func
  5. from sqlalchemy.orm import relationship, backref
  6. from sqlalchemy.orm.collections import attribute_mapped_collection
  7. import hashlib,time

  8. if session.has_key('login'):
  9.     engine, db_session = g.db[session['login']]
  10. else:
  11.     engine, db_session = g.db['default']
  12. Base = declarative_base()
  13. print db_session
  14. Base.query = db_session.query_property()


  15. class User(Base):
  16.     __tablename__ = 'users' #职员表
  17.    
  18.     id = Column(Integer, primary_key=True)
  19.     name = Column(String(50), unique=True)
  20.     created_at = Column(String(20), default = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
  21.    
  22.     def __init__(self, name):
  23.         self.name = name
复制代码

论坛徽章:
0
发表于 2012-05-10 07:41 |显示全部楼层
回复 1# hlsd665


    先考虑把功能作对了再考虑速度吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP