@@ -127,7 +127,9 @@ def _module_start(self, reentrance=False):
127127 _is_worker_running = True
128128 io ._enable ()
129129 for w in self ._workers :
130- w .start ()
130+ th = _WorkerThread (w )
131+ self ._worker_threads .append (th )
132+ th .start ()
131133 for sub in self ._submodules :
132134 sub ._start (True )
133135 time .sleep (0.001 )
@@ -139,18 +141,19 @@ def _module_stop(self, reentrance=False):
139141 if not _is_worker_running :
140142 return
141143 _is_worker_running = False
142- for w in self ._workers :
143- w .prejoin ()
144+ for th in self ._worker_threads :
145+ th .prejoin ()
144146 for sub in self ._submodules :
145147 sub ._stop ()
146148 if not reentrance :
147149 io ._disable ()
148- for w in self ._workers :
149- w .join ()
150+ for th in self ._worker_threads :
151+ th .join ()
152+ self ._worker_threads .clear ()
150153
151154
152155def _module_append_worker (self , fn , * args ):
153- self ._workers .append (_Worker (fn , * args ))
156+ self ._workers .append (_Worker (fn , args ))
154157
155158
156159def _module_deepcopy (self , memo ):
@@ -176,6 +179,7 @@ def _module_decorator(*args, **kwargs):
176179 instance ._module_decorator = self
177180 io ._enable ()
178181 setattr (instance , '_workers' , [])
182+ setattr (instance , '_worker_threads' , [])
179183 setattr (instance , '_submodules' , [])
180184 instance .__init__ (* args , ** kwargs )
181185 io ._disable ()
@@ -248,19 +252,25 @@ def __init__(self, param0, param1):
248252'''
249253
250254
251- class _Worker (threading . Thread ):
252- def __init__ (self , func , * args ):
255+ class _Worker (object ):
256+ def __init__ (self , func , args ):
253257 super ().__init__ ()
254258 self .func = func
255259 self .args = args
260+
261+
262+ class _WorkerThread (threading .Thread ):
263+ def __init__ (self , w ):
264+ super ().__init__ ()
265+ self .worker = w
256266 self .daemon = True
257267
258268 def run (self ):
259269 try :
260- if self .args :
261- self .func (* self .args )
270+ if self .worker . args :
271+ self .worker . func (* self . worker .args )
262272 else :
263- self .func ()
273+ self .worker . func ()
264274 except io .PolyphonyIOException as e :
265275 module .abort ()
266276 except Exception as e :
@@ -277,20 +287,26 @@ def __init__(self, **kwargs):
277287 self .rules = kwargs
278288
279289 def __enter__ (self ):
280- print ('with rules=' , self .rules )
281290 return self
282291
283292 def __exit__ (self , exc_type , exc_value , traceback ):
284293 return False
285294
286295 def __call__ (self , func ):
287296 def wrapper (* args , ** kwargs ):
288- func (* args , ** kwargs )
289- print ('decorator rules=' , self .rules )
297+ return func (* args , ** kwargs )
290298 return wrapper
291299
292300 def __call__ (self , ** kwargs ):
293301 return _Rule ._Stub (** kwargs )
294302
295303
296304rule = _Rule ()
305+
306+
307+ def pipelined (seq ):
308+ return seq
309+
310+
311+ def unroll (seq , factor = 'full' ):
312+ return seq
0 commit comments