Paul Rubin wrote:

Skip Montanaro <[EMAIL PROTECTED]> writes:


How about (untested):

import Queue
counter = Queue.Queue()
counter.put(0)
def f():
i = counter.get()
counter.put(i+1)
return i



Hmmm, that's a bit messier than I hoped for, but it looks sure to work.

I think for my immediate requirement, I'm going to use xrange as Tim
suggested. However, I can't be sure that will work in non-GIL
implementations.


Hello,

Simple xrange stuff won't work in Jython as Sython is running on a JVM which doesn't have a GIL kinda thing. If you wanna return a sequential number then you'll need something like :

<PSEUDO CODE>

class COUNTER:
   DOC : THIS WILL RETURN AN INCRMENTING LIST OF NUMBERS - THREAD SAFE.

   FUNCTION INIT:
     OBJRLOCK= RLOCK()
     INTRETURNNUM = 0

   FUNCTION NEXT
       TRY{
           RLOCK.AQUIRE
       }FINALLY{
          RLOCK.RELEASE
       }

</PSUEDO CODE>

That basically all you'll need, if you make it iteratable of whatever - you need to wrap the business end of what you are doing around a recursive lock. Personally I dislike the GIL so I avoid writing code that takes advantages of it.

Why psuedo code - this is similar to python code I know but it means I'm not posting untested python code!!

Cheers,

Neil
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to