@@ -102,6 +102,14 @@ def do_fun(self, item):
102
102
# END handle tuple
103
103
104
104
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
+
105
113
class TestThreadInputChannelVerifyTaskNode (_TestTaskBase , InputChannelTask ):
106
114
"""An input channel task, which verifies the result of its input channels,
107
115
should be last in the chain.
@@ -121,15 +129,16 @@ def do_fun(self, item):
121
129
122
130
return item
123
131
124
-
125
132
#{ Utilities
126
133
127
134
def make_proxy_method (t ):
128
135
"""required to prevent binding self into the method we call"""
129
136
wt = weakref .proxy (t )
130
137
return lambda item : wt .do_fun (item )
131
138
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 ):
133
142
"""Create a task chain of feeder, count transformers and order verifcator
134
143
to the pool p, like t1 -> t2 -> t3
135
144
: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
145
154
feeder = None
146
155
frc = feeder_channel
147
156
if feeder_channel is None :
148
- feeder = make_iterator_task (ni )
157
+ feeder = make_iterator_task (ni , taskcls = feedercls )
149
158
frc = p .add_task (feeder )
150
159
# END handle specific feeder
151
160
@@ -154,7 +163,7 @@ def add_task_chain(p, ni, count=1, fail_setup=list(), feeder_channel=None, id_of
154
163
155
164
inrc = frc
156
165
for tc in xrange (count ):
157
- t = TestThreadInputChannelTaskNode (inrc , tc + id_offset , None )
166
+ t = transformercls (inrc , tc + id_offset , None )
158
167
159
168
t .fun = make_proxy_method (t )
160
169
#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
169
178
tasks [1 + id ].fail_after = fail_after
170
179
# END setup failure
171
180
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
180
191
return tasks , rcs
181
192
182
193
def make_iterator_task (ni , taskcls = TestThreadTaskNode , ** kwargs ):
183
194
""":return: task which yields ni items
184
195
:param taskcls: the actual iterator type to use
185
196
:param **kwargs: additional kwargs to be passed to the task"""
186
197
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 )
188
200
return t
189
201
190
202
#} END utilities
0 commit comments