Package starcluster :: Package tests :: Module test_threadpool
[hide private]
[frames] | no frames]

Source Code for Module starcluster.tests.test_threadpool

  1  import logging 
  2  import tempfile 
  3  logging.disable(logging.WARN) 
  4   
  5  from starcluster import tests 
  6  from starcluster import exception 
  7  from starcluster import threadpool 
8 9 10 -class TestThreadPool(tests.StarClusterTest):
11 12 _jobs = 5 13 _mykw = 'StarCluster!!!' 14 _pool = None 15 16 @property
17 - def pool(self):
18 if not self._pool: 19 self._pool = threadpool.get_thread_pool(10, disable_threads=False) 20 fd = tempfile.TemporaryFile() 21 self._pool.progress_bar.fd = fd 22 return self._pool
23
24 - def _no_args(self):
25 pass
26
27 - def _args_only(self, i):
28 return i
29
30 - def _kwargs_only(self, mykw=None):
31 return mykw
32
33 - def _args_and_kwargs(self, i, mykw=None):
34 return (i, dict(mykw=mykw))
35
36 - def test_no_args(self):
37 pool = self.pool 38 try: 39 for i in range(self._jobs): 40 pool.simple_job(self._no_args, jobid=i) 41 results = pool.wait(numtasks=self._jobs) 42 print "no_args: %s" % results 43 assert results.count(None) == self._jobs 44 except exception.ThreadPoolException, e: 45 raise Exception(e.format_excs())
46
47 - def test_args_only(self):
48 try: 49 pool = self.pool 50 for i in range(self._jobs): 51 pool.simple_job(self._args_only, i, jobid=i) 52 results = pool.wait(numtasks=self._jobs) 53 results.sort() 54 print "args_only: %s" % results 55 assert results == range(self._jobs) 56 except exception.ThreadPoolException, e: 57 raise Exception(e.format_excs())
58
59 - def test_kwargs_only(self):
60 pool = self.pool 61 try: 62 for i in range(self._jobs): 63 pool.simple_job(self._kwargs_only, 64 kwargs=dict(mykw=self._mykw), jobid=i) 65 results = pool.wait(numtasks=self._jobs) 66 print "kwargs_only: %s" % results 67 assert results.count(self._mykw) == self._jobs 68 except exception.ThreadPoolException, e: 69 raise Exception(e.format_excs())
70
71 - def test_args_and_kwargs(self):
72 pool = self.pool 73 try: 74 for i in range(self._jobs): 75 pool.simple_job(self._args_and_kwargs, i, 76 kwargs=dict(mykw=self._mykw), jobid=i) 77 results = pool.wait(numtasks=self._jobs) 78 results.sort() 79 print "args_and_kwargs: %s" % results 80 assert results == zip(range(self._jobs), 81 [dict(mykw=self._mykw)] * self._jobs) 82 except exception.ThreadPoolException, e: 83 raise Exception(e.format_excs())
84
85 - def test_threadpool_map(self):
86 try: 87 r = 20 88 ref = map(lambda x: x ** 2, range(r)) 89 calc = self.pool.map(lambda x: x ** 2, range(r)) 90 calc.sort() 91 assert ref == calc 92 for i in range(r): 93 self.pool.simple_job(lambda x: x ** 2, i, jobid=i) 94 self.pool.wait(return_results=False) 95 calc = self.pool.map(lambda x: x ** 2, range(r)) 96 calc.sort() 97 assert ref == calc 98 except exception.ThreadPoolException, e: 99 raise Exception(e.format_excs())
100