Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>This is my first attempt to play with decorators (although my code doesn't actually use the @decorate syntax), and I don't have much experience with multi-threading/multiprocessing. With that disclaimer, though, here's an attempt I made:</p> <pre><code>from multiprocessing import Lock def decorate_all(obj): lock = Lock() #you'll want to make this more robust: fnc_names = [fnctn for fnctn in dir(obj) if '__' not in fnctn] for name in fnc_names: print 'decorating ' + name fnc = getattr(obj, name) setattr(obj, name, decorate(fnc, lock)) return obj def decorate(fnctn, lock): def decorated(*args): print 'acquiring lock' lock.acquire() try: print 'calling decorated function' return fnctn(*args) finally: print 'releasing lock' lock.release() return decorated def thread_safe(superclass): lock = Lock() class Thread_Safe(superclass): def __init__(self, *args, **kwargs): super(Thread_Safe, self).__init__(*args, **kwargs) return decorate_all(Thread_Safe) &gt;&gt;&gt; thread_safe_set = thread_safe(set) decorating add decorating clear decorating copy decorating difference decorating difference_update decorating discard decorating intersection decorating intersection_update decorating isdisjoint decorating issubset decorating issuperset decorating pop decorating remove decorating symmetric_difference decorating symmetric_difference_update decorating union decorating update &gt;&gt;&gt; s = thread_safe_set() &gt;&gt;&gt; s.add(1) acquiring lock calling decorated function releasing lock &gt;&gt;&gt; s.add(4) acquiring lock calling decorated function releasing lock &gt;&gt;&gt; s.pop() acquiring lock calling decorated function releasing lock 1 &gt;&gt;&gt; s.pop() acquiring lock calling decorated function releasing lock 4 &gt;&gt;&gt; </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload