Source code for pywps.processing.basic

##################################################################
# Copyright 2018 Open Source Geospatial Foundation and others    #
# licensed under MIT, Please consult LICENSE.txt for details     #
##################################################################
import os

from pywps.processing.job import Job


[docs] class Processing(object): """ :class:`Processing` is an interface for running jobs. """ def __init__(self, process, wps_request, wps_response): self.job = Job(process, wps_request, wps_response) def start(self): raise NotImplementedError("Needs to be implemented in subclass.") def cancel(self): raise NotImplementedError("Needs to be implemented in subclass.")
class MultiProcessing(Processing): """ :class:`MultiProcessing` is the default implementation to run jobs using the :module:`multiprocessing` module. """ def start(self): import multiprocessing process = multiprocessing.Process( target=getattr(self.job.process, self.job.method), args=(self.job.wps_request, self.job.wps_response) ) process.start() class DetachProcessing(Processing): """ :class:`DetachProcessing` run job as detached process. The process will be run as child of pid 1 """ def start(self): pid = os.fork() if pid != 0: # Wait that the children get detached. os.waitpid(pid, 0) return # Detach ourself. # Ensure that we are the session leader to avoid to be zombified. os.setsid() if os.fork(): # Stop running now os._exit(0) # We are the detached child, run the actual process try: getattr(self.job.process, self.job.method)(self.job.wps_request, self.job.wps_response) except Exception: pass # Ensure to stop ourself here what ever append. os._exit(0)