@@ -102,6 +102,14 @@ def do_fun(self, item):
102102 # END handle tuple
103103
104104
105+ class TestThreadPerformanceTaskNode (InputChannelTask ):
106+ """Applies no operation to the item, and does not lock, measuring
107+ the actual throughput of the system"""
108+
109+ def do_fun (self , item ):
110+ return item
111+
112+
105113class TestThreadInputChannelVerifyTaskNode (_TestTaskBase , InputChannelTask ):
106114 """An input channel task, which verifies the result of its input channels,
107115 should be last in the chain.
@@ -121,15 +129,16 @@ def do_fun(self, item):
121129
122130 return item
123131
124-
125132#{ Utilities
126133
127134def make_proxy_method (t ):
128135 """required to prevent binding self into the method we call"""
129136 wt = weakref .proxy (t )
130137 return lambda item : wt .do_fun (item )
131138
132- def add_task_chain (p , ni , count = 1 , fail_setup = list (), feeder_channel = None , id_offset = 0 ):
139+ def add_task_chain (p , ni , count = 1 , fail_setup = list (), feeder_channel = None , id_offset = 0 ,
140+ feedercls = TestThreadTaskNode , transformercls = TestThreadInputChannelTaskNode ,
141+ include_verifier = True ):
133142 """Create a task chain of feeder, count transformers and order verifcator
134143 to the pool p, like t1 -> t2 -> t3
135144 :param fail_setup: a list of pairs, task_id, fail_after, i.e. [(2, 20)] would
@@ -145,7 +154,7 @@ def add_task_chain(p, ni, count=1, fail_setup=list(), feeder_channel=None, id_of
145154 feeder = None
146155 frc = feeder_channel
147156 if feeder_channel is None :
148- feeder = make_iterator_task (ni )
157+ feeder = make_iterator_task (ni , taskcls = feedercls )
149158 frc = p .add_task (feeder )
150159 # END handle specific feeder
151160
@@ -154,7 +163,7 @@ def add_task_chain(p, ni, count=1, fail_setup=list(), feeder_channel=None, id_of
154163
155164 inrc = frc
156165 for tc in xrange (count ):
157- t = TestThreadInputChannelTaskNode (inrc , tc + id_offset , None )
166+ t = transformercls (inrc , tc + id_offset , None )
158167
159168 t .fun = make_proxy_method (t )
160169 #t.fun = t.do_fun
@@ -169,22 +178,25 @@ def add_task_chain(p, ni, count=1, fail_setup=list(), feeder_channel=None, id_of
169178 tasks [1 + id ].fail_after = fail_after
170179 # END setup failure
171180
172- verifier = TestThreadInputChannelVerifyTaskNode (inrc , 'verifier' , None )
173- #verifier.fun = verifier.do_fun
174- verifier .fun = make_proxy_method (verifier )
175- vrc = p .add_task (verifier )
176-
177-
178- tasks .append (verifier )
179- rcs .append (vrc )
181+ if include_verifier :
182+ verifier = TestThreadInputChannelVerifyTaskNode (inrc , 'verifier' , None )
183+ #verifier.fun = verifier.do_fun
184+ verifier .fun = make_proxy_method (verifier )
185+ vrc = p .add_task (verifier )
186+
187+
188+ tasks .append (verifier )
189+ rcs .append (vrc )
190+ # END handle include verifier
180191 return tasks , rcs
181192
182193def make_iterator_task (ni , taskcls = TestThreadTaskNode , ** kwargs ):
183194 """:return: task which yields ni items
184195 :param taskcls: the actual iterator type to use
185196 :param **kwargs: additional kwargs to be passed to the task"""
186197 t = taskcls (iter (range (ni )), 'iterator' , None , ** kwargs )
187- t .fun = make_proxy_method (t )
198+ if isinstance (t , _TestTaskBase ):
199+ t .fun = make_proxy_method (t )
188200 return t
189201
190202#} END utilities
0 commit comments