PageRenderTime 506ms CodeModel.GetById 215ms app.highlight 8ms RepoModel.GetById 204ms app.codeStats 0ms

/Doc/includes/mp_newtype.py

http://unladen-swallow.googlecode.com/
Python | 101 lines | 59 code | 24 blank | 18 comment | 7 complexity | 7fd3c8f39caf215dd8524fb637978e02 MD5 | raw file
  1#
  2# This module shows how to use arbitrary callables with a subclass of
  3# `BaseManager`.
  4#
  5# Copyright (c) 2006-2008, R Oudkerk
  6# All rights reserved.
  7#
  8
  9from multiprocessing import freeze_support
 10from multiprocessing.managers import BaseManager, BaseProxy
 11import operator
 12
 13##
 14
 15class Foo(object):
 16    def f(self):
 17        print 'you called Foo.f()'
 18    def g(self):
 19        print 'you called Foo.g()'
 20    def _h(self):
 21        print 'you called Foo._h()'
 22
 23# A simple generator function
 24def baz():
 25    for i in xrange(10):
 26        yield i*i
 27
 28# Proxy type for generator objects
 29class GeneratorProxy(BaseProxy):
 30    _exposed_ = ('next', '__next__')
 31    def __iter__(self):
 32        return self
 33    def next(self):
 34        return self._callmethod('next')
 35    def __next__(self):
 36        return self._callmethod('__next__')
 37
 38# Function to return the operator module
 39def get_operator_module():
 40    return operator
 41
 42##
 43
 44class MyManager(BaseManager):
 45    pass
 46
 47# register the Foo class; make `f()` and `g()` accessible via proxy
 48MyManager.register('Foo1', Foo)
 49
 50# register the Foo class; make `g()` and `_h()` accessible via proxy
 51MyManager.register('Foo2', Foo, exposed=('g', '_h'))
 52
 53# register the generator function baz; use `GeneratorProxy` to make proxies
 54MyManager.register('baz', baz, proxytype=GeneratorProxy)
 55
 56# register get_operator_module(); make public functions accessible via proxy
 57MyManager.register('operator', get_operator_module)
 58
 59##
 60
 61def test():
 62    manager = MyManager()
 63    manager.start()
 64
 65    print '-' * 20
 66
 67    f1 = manager.Foo1()
 68    f1.f()
 69    f1.g()
 70    assert not hasattr(f1, '_h')
 71    assert sorted(f1._exposed_) == sorted(['f', 'g'])
 72
 73    print '-' * 20
 74
 75    f2 = manager.Foo2()
 76    f2.g()
 77    f2._h()
 78    assert not hasattr(f2, 'f')
 79    assert sorted(f2._exposed_) == sorted(['g', '_h'])
 80
 81    print '-' * 20
 82
 83    it = manager.baz()
 84    for i in it:
 85        print '<%d>' % i,
 86    print
 87
 88    print '-' * 20
 89
 90    op = manager.operator()
 91    print 'op.add(23, 45) =', op.add(23, 45)
 92    print 'op.pow(2, 94) =', op.pow(2, 94)
 93    print 'op.getslice(range(10), 2, 6) =', op.getslice(range(10), 2, 6)
 94    print 'op.repeat(range(5), 3) =', op.repeat(range(5), 3)
 95    print 'op._exposed_ =', op._exposed_
 96
 97##
 98
 99if __name__ == '__main__':
100    freeze_support()
101    test()