[Twisted-web] cooperate and keeping data integrity in response

exarkun at twistedmatrix.com exarkun at twistedmatrix.com
Mon Jan 16 08:54:53 EST 2012


On 14 Jan, 09:30 am, johnaherne at rocs.co.uk wrote:
>I have been looking at JPCalderones example of using web.request with 
>JSON
>which seems much like what I want.
>
>One thing I am not clear about is if I get a lot of queries coming in 
>more
>or less simultaneously and I am using cooperate to allow other 
>functions to
>run, will I need to guard against my data in a list being overwritten 
>by
>subsequent requests.
>
>The way I see it the functions to read data and and store it in my list 
>are
>in danger of impacting each other.
>
>The response is being built cooperatively bit by bit to permit other
>functions to run so it could happen that the next request overwrites my
>list where the database query is being stored.

Any time you have shared mutable state, you have this possibility.  You 
do need to take measures to avoid making one request destroy the state 
associated with another request.
>If this is a danger, then I need to prevent this, which seems to imply 
>that
>I will need to block each request and not service another request until 
>the
>previous one has completed.

Serializing (ie, not processing a second request until the first is 
completed) processing is one way to accomplish this.

However, another way to accomplish it is to not have shared mutable 
state.  A quick skim of your code suggests you don't actually have much, 
if any, shared mutable state.

The list holding your database results is a local variable, and each 
request builds its own (as far as I can tell).  There is no danger of 
different requests interfering with each other in this case.

Jean-Paul



More information about the Twisted-web mailing list