@@ -191,6 +191,15 @@ def check_for_abstract_op(tool: CWLObjectType) -> None:
191
191
return (self .final_output [0 ], self .final_status [0 ])
192
192
return (None , "permanentFail" )
193
193
194
+ def message_about_other_runners (self ) -> None :
195
+ _logger .info (
196
+ "Need to grow beyond `cwltool` and scale up your workflows to run on a multi-node cluster, or in the cloud?"
197
+ )
198
+ _logger .info (
199
+ "CWL workflows are portable and run on many commercial and open source platforms."
200
+ )
201
+ _logger .info ("Visit https://www.commonwl.org/implementations/ to learn more." )
202
+
194
203
195
204
class SingleJobExecutor (JobExecutor ):
196
205
"""Default single-threaded CWL reference executor."""
@@ -203,6 +212,10 @@ def run_jobs(
203
212
runtime_context : RuntimeContext ,
204
213
) -> None :
205
214
215
+ _logger .info (
216
+ "Using default serial job executor. Use `cwltool --parallel` to run multiple steps at a time."
217
+ )
218
+
206
219
process_run_id = None # type: Optional[str]
207
220
208
221
# define provenance profile for single commandline tool
@@ -252,6 +265,7 @@ def run_jobs(
252
265
else :
253
266
logger .error ("Workflow cannot make any more progress." )
254
267
break
268
+ self .message_about_other_runners ()
255
269
except (
256
270
ValidationException ,
257
271
WorkflowException ,
@@ -416,6 +430,10 @@ def run_jobs(
416
430
runtime_context : RuntimeContext ,
417
431
) -> None :
418
432
433
+ _logger .info (
434
+ "Using parallel job executor. Multiple steps will run at once as hardware resources permit."
435
+ )
436
+
419
437
self .taskqueue = TaskQueue (
420
438
threading .Lock (), psutil .cpu_count ()
421
439
) # type: TaskQueue
@@ -456,6 +474,7 @@ def run_jobs(
456
474
finally :
457
475
self .taskqueue .drain ()
458
476
self .taskqueue .join ()
477
+ self .message_about_other_runners ()
459
478
460
479
461
480
class NoopJobExecutor (JobExecutor ):
0 commit comments