if the issue is only with threads and not concurrent processes then the
DBAPI in use would be suspect.  I don't see which driver you are using
but perhaps it is not releasing the GIL while it waits for a server
response.   I'd identify which driver this is, produce a test case that
isolates it just to that driver running in two threads, and then report
it as a bug on their system.



On 11/21/2015 03:11 AM, Mohsen Lotfizad wrote:
> Hi,
> I have a project using pyramid + ZopeTransactionExtension + SQLAlchemy +
> MSSql.
> The problem is that when I call /foo_avarage_one_month/ once (using
> curl) it took about 5 second to response, but when I call it with 2
> session concurrently, it took about 9 second to response!
> I run my project on two process and my response time was about 5 second.
> What should I do if I want /foo_avarage_one_month /response in 5 second
> for any concurrent session?
> 
> 
> file: foo_biz.py
> 
> 
> from pyramid_rpc.jsonrpc import jsonrpc_method
> 
> 
> /class FooBiz:
> /
> 
>  
> 
>     @jsonrpc_method(method='foo_avg', endpoint='api')
> 
> /def foo_avarage_one_month(self):
> //foo_keys = [1..500]//
> /
> 
> / result = list()/
> 
> /for k in //foo_keys: /
> 
> /result.append(calc_avg(self./foo_repo./find_foo_date_range(k, /to_day + 
> relativedelta(months=-1)/)))/
> 
> /return result
> /
> 
> /
> /
> 
> file: foo_repo.py
> 
> /class FooRepo:
> def find_foo_date_range(self, _key: int, interval_dates: Tuple) ->
> List[DailyFoo]:
> db_session = get_session()
> query = db_session().query(DailyFoo)/
> 
> /query = query.filter_by(_key=_key)
> query = query.filter(DailyFoo.volume > 0)
> query = query.with_hint(DailyFoo, 'with (nolock)')
> query = query.filter(DailyFoo.day_key <= interval_dates[1])
> query = query.filter(DailyFoo.day_key >= interval_dates[0])
> query = query.order_by(DailyFoo.day_key.desc())
> return query.all()
> /
> 
> 
> file: alchemy_config.py
> 
> 
> /_db_session = None
> metadata = None
> 
> 
> def get_session():
> return _db_session
> 
> 
> def create_db_session(settings):
> global _db_session, metadata
> engine = engine_from_config(settings, 'engine.sqlalchemy.')
> _db_session = scoped_session(sessionmaker(bind=engine,
> extension=ZopeTransactionExtension()))
> metadata = MetaData(bind=engine)/
> 
> -- 
> You received this message because you are subscribed to the Google
> Groups "sqlalchemy" group.
> To unsubscribe from this group and stop receiving emails from it, send
> an email to [email protected]
> <mailto:[email protected]>.
> To post to this group, send email to [email protected]
> <mailto:[email protected]>.
> Visit this group at http://groups.google.com/group/sqlalchemy.
> For more options, visit https://groups.google.com/d/optout.

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to