6. Power Features¶
This section groups a few of Pythonect power features that one day may get their own section
6.1. Autoloader¶
Pythonect includes an autoloader functionally. You can access any functions,
attributes, etc. from a Python module without having to import
it
first. For example:
"Hello, world" -> string.split | print
Will print (in that order, and in different threads): Hello,
and
world
. Another example:
sys.path -> print
Will print (in no particular order) every directory in your PATH
, as represented in your sys.path.
6.2. Using &
to Spawn a New Process¶
Pythonect uses threads by default, but you can switch to processes by using the metacharacter &
. For example:
"Hello, world" -> print &
This will print "Hello, world"
from a new process. You can also mix and match:
"Hello, world" -> [print, print &]
This will print "Hello, world"
twice, one from a new thread and the other from a new process.
Notice that switch between thread and process is only valid for the duration of the function call/expression evaluation.
6.3. Using @
to Remote Call¶
Pythonect lets you call functions remotely, by using the metacharacter @
. To demonstrate this, you will need to use the following simple server (written in Python):
from SimpleXMLRPCServer import SimpleXMLRPCServer
from SimpleXMLRPCServer import SimpleXMLRPCRequestHandler
class RequestHandler(SimpleXMLRPCRequestHandler):
rpc_paths = ('/RPC2',)
def say_hello(x):
return "Hello " + x + " and world"
server = SimpleXMLRPCServer(("localhost", 8000), requestHandler=RequestHandler)
server.register_function(say_hello)
server.serve_forever()
Save it as xmlrpc_srv.py
and run it. This code will run a Simple XML-RPC server that will export a function called say_hello
.
Now, calling say_hello
from Pythonect is as easy as:
"foobar" -> say_hello@xmlrpc://localhost:8000 -> print
This will print Hello foobar and world
.
The destination hostname can also be the result of a function call, or an expression. For example:
"foobar" -> say_hello@"xmlrpc://" + "localhost:8000" -> print
Or:
"foobar" -> say_hello@"xmlrpc://" + get_free_host() -> print
Where get_free_host()
is a fictional Python function that will return an available hostname from a list of hostnames.
As a loopback, you can use None
as an hostname to make the call locally. For example:
"Hello, world" -> print@None
Is equal to:
"Hello, world" -> print
Both will print "Hello, world"
locally.