[IronPython] Converting C# to Python ... the lock() keyword?

Dino Viehland dinov at microsoft.com
Mon Jan 11 19:23:10 CET 2010


If you really want to use .NET monitors you can code it up as a try/finally:

Monitor.Enter(m_object)
try:
	if ...:
		...
finally:
	Monitor.Exit(m_object)

If you'd like to do a slightly more Pythonic lock you could do:

import threading

x = threading.Lock()
with x:
    pass

Or you could combine the two approaches:

from System.Threading import Monitor
class ObjectLocker(object):
    def __init__(self, obj):
            self.obj = obj
    def __enter__(self):
            Monitor.Enter(self.obj)
    def __exit__(self, *args):
            Monitor.Exit(self.obj)

with ObjectLocker(object()):
    pass



> -----Original Message-----
> From: users-bounces at lists.ironpython.com [mailto:users-
> bounces at lists.ironpython.com] On Behalf Of Sandy Walsh
> Sent: Monday, January 11, 2010 9:43 AM
> To: users at lists.ironpython.com
> Subject: [IronPython] Converting C# to Python ... the lock() keyword?
> 
> Hi,
> 
> I'm converting a C# program to IronPython and running into the C# lock()
> command ... what is the equivalent operation in IronPython?
> 
> The C# is like:
> 
>   lock(m_object)
>      if (...)
>      {
>       ...
>       }
> 
> Thanks!
> -Sandy




More information about the Ironpython-users mailing list