@@ -891,11 +891,52 @@ def close(self):
891
891
"""Finalize the internal pool of tasks."""
892
892
pass
893
893
894
+ class PsijWorker (Worker ):
895
+ def __init__ (self , ** kwargs ):
896
+ """Initialize worker."""
897
+ try :
898
+ import psij
899
+ except ImportError :
900
+ logger .critical ("Please install psij." )
901
+ raise
902
+ logger .debug ("Initialize PsijWorker" )
894
903
904
+ def run_el (self , interface , rerun = False , ** kwargs ):
905
+ """Run a task."""
906
+ return self .exec_psij (interface , rerun = rerun )
907
+
908
+ def make_spec (self , cmd = None , arg = None , cache_dir = None ):
909
+ spec = self .psij .JobSpec ()
910
+ spec .executable = cmd
911
+ spec .arguments = arg
912
+ spec .stdout_path = 'demo.stdout'
913
+ spec .stderr_path = 'demo.stderr'
914
+
915
+ return spec
916
+
917
+ def make_job (self , spec , attributes ):
918
+ job = self .psij .Job ()
919
+ job .spec = spec
920
+ return job
921
+
922
+ async def exec_psij (self , runnable , rerun = False ):
923
+ import psij
924
+ self .psij = psij
925
+ jex = psij .JobExecutor .get_instance ('local' )
926
+ spec = self .make_spec (runnable .inputs .executable , runnable .inputs .args , runnable .cache_dir )
927
+ job = self .make_job (spec , None )
928
+ jex .submit (job )
929
+ return
930
+
931
+ def close (self ):
932
+ """Finalize the internal pool of tasks."""
933
+ pass
934
+
895
935
WORKERS = {
896
936
"serial" : SerialWorker ,
897
937
"cf" : ConcurrentFuturesWorker ,
898
938
"slurm" : SlurmWorker ,
899
939
"dask" : DaskWorker ,
900
940
"sge" : SGEWorker ,
941
+ "psij" : PsijWorker ,
901
942
}
0 commit comments