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.

Questions? Comments?

comments powered by Disqus

Project Versions

Table Of Contents

Previous topic

5. Control Flow Tools

Next topic

Development

This Page