#2134: Create a general exit-safe interface to C libraries
--------------------------------------------------+-------------------------
 Reporter:  wenzeslaus                            |       Owner:  grass-dev@…   
           
     Type:  enhancement                           |      Status:  new           
           
 Priority:  normal                                |   Milestone:  7.0.0         
           
Component:  Python ctypes                         |     Version:  svn-trunk     
           
 Keywords:  G_fatal_error, exit, multiprocessing  |    Platform:  All           
           
      Cpu:  Unspecified                           |  
--------------------------------------------------+-------------------------

Comment(by huhabla):

 I have implemented a new RPC server that can call any kind of Python
 function directly in the server subprocess. The server subprocess will
 restart in case the provided Python function was terminated (segfault,
 exception, G_fatal_error, ...).

 The Python file with the new RPC design is attached. Please have a look at
 the doctest examples that demonstrate how to use the RPCServer.

 The RPC server supports two methods to call remote functions {{{
 call(function, args) }}} and {{{ call_no_wait(function, args)}}}. The
 {{{call()}}} function will always wait for the server to commit the return
 value of the called Python function although the function may have no
 return value. The {{{call_no_wait()}}} function will not wait for the
 Python function to finish and therefor not return any return value of the
 called Python function.

 Example:
 {{{
 def info(args):
     message = args[0]
     libgis.G_message(message)

 def raster_map_exists(args)
     name = args[0]
     mapset = args[1]
     mapset = libgis.G_find_raster(name, mapset)

     if mapset:
         return True

     return False

 rpc = RPCServer()
 rpc.call_no_wait(function=info, args=("This is a message",))

 ret = rpc.call(function=raster_map_exists, args=("test", "PERMANENT"))
 }}}

 I am still not sure about the best Python caller function design. Should
 the error return values of GRASS C-library functions be returned, or
 should an exception be raised?

 Any suggestions are welcome.

-- 
Ticket URL: <http://trac.osgeo.org/grass/ticket/2134#comment:1>
GRASS GIS <http://grass.osgeo.org>

_______________________________________________
grass-dev mailing list
grass-dev@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/grass-dev

Reply via email to