Home | History | Annotate | Download | only in includes
      1 from multiprocessing import freeze_support
      2 from multiprocessing.managers import BaseManager, BaseProxy
      3 import operator
      4 
      5 ##
      6 
      7 class Foo:
      8     def f(self):
      9         print('you called Foo.f()')
     10     def g(self):
     11         print('you called Foo.g()')
     12     def _h(self):
     13         print('you called Foo._h()')
     14 
     15 # A simple generator function
     16 def baz():
     17     for i in range(10):
     18         yield i*i
     19 
     20 # Proxy type for generator objects
     21 class GeneratorProxy(BaseProxy):
     22     _exposed_ = ['__next__']
     23     def __iter__(self):
     24         return self
     25     def __next__(self):
     26         return self._callmethod('__next__')
     27 
     28 # Function to return the operator module
     29 def get_operator_module():
     30     return operator
     31 
     32 ##
     33 
     34 class MyManager(BaseManager):
     35     pass
     36 
     37 # register the Foo class; make `f()` and `g()` accessible via proxy
     38 MyManager.register('Foo1', Foo)
     39 
     40 # register the Foo class; make `g()` and `_h()` accessible via proxy
     41 MyManager.register('Foo2', Foo, exposed=('g', '_h'))
     42 
     43 # register the generator function baz; use `GeneratorProxy` to make proxies
     44 MyManager.register('baz', baz, proxytype=GeneratorProxy)
     45 
     46 # register get_operator_module(); make public functions accessible via proxy
     47 MyManager.register('operator', get_operator_module)
     48 
     49 ##
     50 
     51 def test():
     52     manager = MyManager()
     53     manager.start()
     54 
     55     print('-' * 20)
     56 
     57     f1 = manager.Foo1()
     58     f1.f()
     59     f1.g()
     60     assert not hasattr(f1, '_h')
     61     assert sorted(f1._exposed_) == sorted(['f', 'g'])
     62 
     63     print('-' * 20)
     64 
     65     f2 = manager.Foo2()
     66     f2.g()
     67     f2._h()
     68     assert not hasattr(f2, 'f')
     69     assert sorted(f2._exposed_) == sorted(['g', '_h'])
     70 
     71     print('-' * 20)
     72 
     73     it = manager.baz()
     74     for i in it:
     75         print('<%d>' % i, end=' ')
     76     print()
     77 
     78     print('-' * 20)
     79 
     80     op = manager.operator()
     81     print('op.add(23, 45) =', op.add(23, 45))
     82     print('op.pow(2, 94) =', op.pow(2, 94))
     83     print('op._exposed_ =', op._exposed_)
     84 
     85 ##
     86 
     87 if __name__ == '__main__':
     88     freeze_support()
     89     test()
     90