On Jan 25, 2013, at 5:35 PM, Pedro Werneck wrote:

>> If the script that is searching for status=0 is finding rows that are 
>> committed, then the worker that is querying for those rows should be able to 
>> see them, unless the worker has been holding open a long running 
>> transaction.  
> 
> Exactly.
>  
>> Long running transactions here are more of the antipattern.   The worker 
>> should ensure it responds to new messages from the status=0 script with a 
>> brand new transaction to read the message in question.
> 
> 
> That's the point. What's the best way to do that, considering the worker is 
> never updating anything, only reading? Should I commit in the end of every 
> task then, even without anything to commit? Should I start a new session on 
> every call? The commit does that automatically if I'm not using 
> autocommit=True, right?

just do it like this:


def receive_some_request(args):
    session = Session(some_engine)   # "connect" to the database (in reality, 
pulls a connection from a pool as soon as the Session is used to emit SQL)
    try:
       .. do things with session ...
        session.commit()    # if you have data to commit
    finally:
       session.close()   # close what was opened above.

just like it were a plain database connection.  that's per request received by 
your worker.



> 
>  
> The worker should wait for a request from the script in a non-transactional 
> state, without a Session.  A request from the script comes in- the worker 
> starts a new Session to respond to that request, hence new transaction.   
> Thinking about transaction demarcation in reverse still seems to suggest that 
> this worker is leaving a dormant connection open as it waits for new jobs.
> 
> I'm pretty sure it does. I'm using Flask SQLAlchemy and Celery for the 
> workers. The workers reach the global app for the session and are keeping the 
> connection open, but they do have work almost all the time and never sleep 
> for more than a few secs.
> 
> 
> ---
> Pedro Werneck
> 
> -- 
> 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?hl=en.
> 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?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to