how about a stack trace?

On Oct 21, 2013, at 4:11 PM, Joseph Casale <jcas...@gmail.com> wrote:

> Hi Michael,
> I spoke with the developer of the application that launches the plugins I am 
> writing and each
> python script is run by starting an entirely new process with the interpreter 
> and each plugin.
> 
> It should be a clean environment. From the plugins, I simply import which 
> ever tables from
> the module below that I would need.
> 
> In the event I am doing something wrong, my code looks like:
> 
> from os import path
> from sqlalchemy import (
>     Column, CheckConstraint, DDL, ForeignKey, Index, Integer, String,
>     create_engine, event
> )
> from sqlalchemy.engine import Engine
> from sqlalchemy.ext.declarative import declared_attr, declarative_base
> from sqlalchemy.orm import sessionmaker
> 
> 
> db_name = path.join('path', 'config', 'sqlite.db')
> engine = create_engine('sqlite:///{}'.format(db_name), echo=False)
> Session = sessionmaker(bind=engine, autoflush=False, autocommit=False)
> Base = declarative_base()
> 
> 
> @event.listens_for(Engine, 'connect')
> def set_sqlite_pragma(dbapi_connection, connection_record):
>     cursor = dbapi_connection.cursor()
>     cursor.execute('PRAGMA foreign_keys=ON')
>     cursor.close()
> 
> 
> table defs...
> 
> 
> if __name__ == '__main__':
>     Base.metadata.create_all(engine)
> 
> 
> Thanks so much for the help,
> jlc
> 
> 
> On Sun, Oct 20, 2013 at 11:01 PM, Michael Bayer <mike...@zzzcomputing.com> 
> wrote:
> the MetaData object holds one Table object per unique name given.   If you 
> use the Table constructor more than once with the same name and the same 
> MetaData, you get this error.
> 
> That's how the error is caused, then the fact that the error is "occasional" 
> points strongly to a race condition of some kind, more than one thread both 
> calling the constructor for Table with the same name.   Patterns that could 
> cause this could be some kind of unsynchronized global registry or singleton 
> object that when called produces a new Table object.
> 
> The recommended pattern is for Table objects (as well as mapped classes) to 
> generally be declared at the module level so that these names are produced 
> only at module import time, which itself should occur before the application 
> starts any threads in addition to the main application thread.
> 
> 
> 
> 
> On Oct 20, 2013, at 11:04 PM, Joseph Casale <jcas...@gmail.com> wrote:
> 
>> I have a module that is imported by several Python scripts run by an 
>> application
>> that fires up a new interpreter session for each invocation. When not under 
>> load or
>> running the code manually at the cli things work fine but once the 
>> concurrency
>> raises and the application starts seeing some load it emits 
>> InvalidRequestError
>> exceptions on one table.
>> 
>> After searching I am not sure the results relate to my issue or maybe my lack
>> of familiarity with SQLAlchemy has the better of me.
>> 
>> Any guidance would be greatly appreciated,
>> jlc
>> 
>> -- 
>> 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 sqlalchemy+unsubscr...@googlegroups.com.
>> To post to this group, send email to sqlalchemy@googlegroups.com.
>> Visit this group at http://groups.google.com/group/sqlalchemy.
>> For more options, visit https://groups.google.com/groups/opt_out.
> 
> 
> 
> -- 
> 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 sqlalchemy+unsubscr...@googlegroups.com.
> To post to this group, send email to sqlalchemy@googlegroups.com.
> Visit this group at http://groups.google.com/group/sqlalchemy.
> For more options, visit https://groups.google.com/groups/opt_out.

Attachment: signature.asc
Description: Message signed with OpenPGP using GPGMail

Reply via email to