@@ -191,6 +191,15 @@ def check_for_abstract_op(tool: CWLObjectType) -> None:
191191 return (self .final_output [0 ], self .final_status [0 ])
192192 return (None , "permanentFail" )
193193
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+
194203
195204class SingleJobExecutor (JobExecutor ):
196205 """Default single-threaded CWL reference executor."""
@@ -203,6 +212,10 @@ def run_jobs(
203212 runtime_context : RuntimeContext ,
204213 ) -> None :
205214
215+ _logger .info (
216+ "Using default serial job executor. Use `cwltool --parallel` to run multiple steps at a time."
217+ )
218+
206219 process_run_id = None # type: Optional[str]
207220
208221 # define provenance profile for single commandline tool
@@ -252,6 +265,7 @@ def run_jobs(
252265 else :
253266 logger .error ("Workflow cannot make any more progress." )
254267 break
268+ self .message_about_other_runners ()
255269 except (
256270 ValidationException ,
257271 WorkflowException ,
@@ -416,6 +430,10 @@ def run_jobs(
416430 runtime_context : RuntimeContext ,
417431 ) -> None :
418432
433+ _logger .info (
434+ "Using parallel job executor. Multiple steps will run at once as hardware resources permit."
435+ )
436+
419437 self .taskqueue = TaskQueue (
420438 threading .Lock (), psutil .cpu_count ()
421439 ) # type: TaskQueue
@@ -456,6 +474,7 @@ def run_jobs(
456474 finally :
457475 self .taskqueue .drain ()
458476 self .taskqueue .join ()
477+ self .message_about_other_runners ()
459478
460479
461480class NoopJobExecutor (JobExecutor ):
0 commit comments