Google

<previous | contents Pyro Manual

12. Pyro Change Log

(most recent entries at the end)

Pyro versions before 3.0 can be found in the archive.

Pyro 3.0

  • Major new version! Not compatible with older versions!
  • Pyro is now under the MIT software license. This license is much easier and less restrictive than the previous (GNU LGPL). Please read the file "LICENSE"!
  • Major speedup, up to twice as fast as before! (Thanks to new threading code) This makes Pyro in multithreaded mode as fast as singlethreaded mode :-)
  • Removed last traces of sockets in core.py. It only works with the more abstract connection objects.
  • Added SSL support (based on a patch by Holger Brückner, thanks!). Requires M2Crypto module.
  • Simplified objectID encoding, now uses hexlified guids everywhere. No more converting from/to binary strings.
  • Changed threading in protocol.py: Pyro used to hang when bad clients connected but didn't write their full message on the socket. Now Pyro splits off a new thread directly, as soon as it detected a new connection or request.
  • Pyro no longer spawns a new thread for each request. Instead, it spawns a single thread for each connection, and hands control to that thread. The thread processes requests sequentially, and dies when the connection closes. This causes a major speedup when processing lots of small requests.
  • Fixed some obscure potential socket/threading bugs and made protocol version mismatch handling slightly better.
  • Connection denied reasons added to constants.py
  • Fixed cpu-bound server in multithreading example Server automatically answers in correct pickle format.
  • No longer dumps config twice when program uses both init client and init server.
  • Fixed some cyclic references. Object-daemon reference is now a weak reference if available (Python 2.1+). Daemon/tcpserver now appears to clean up nicely.
  • Added some extra cleanup methods to nicely close socket connections.
  • Authenticated connection validation. You can now require the Pyro client to give a valid authentication ID (password) while connecting. Control this using the improved connection validator. Not used by default, so old code still works without authentication. See the "NS_sec_plugins" example.
  • Configurable timeouts on sending and receiving of messages. Due to changed connection procedure, this also works for new connections. So Pyro can now also timeout when a new client just connects and blocks without sending anything (the port is not occupied forever).
  • Added a new chapter about security to the manual.
  • The Daemon is no longer directly remotely accessible. Instead, there is now a DaemonServant object with a limited interface that is the actual Pyro object and that calls the daemon.
  • PyroURI objects have two new methods to directly get a proxy from an URI object: getProxy and getAttrProxy.
  • Proxies can now be 'passivated' if they are not needed for a while (they release their network connection) proxy._release()
  • Transient server objects can be automatically cleaned up after a specified period of inactivity. daemon.setTransientsCleanupAge(timeout) Also added this to the Bank2 example, so have a look there.
  • Mobile agents can now import other modules that don't already exist on the server! (But only from within the agent class methods, not from within the defining module scope) They will also be loaded from the client, if the codeValidator allows this.
  • Special base class for callback objects; CallbackObjBase. It will raise local exceptions also, not only silently passing them back to the server.
  • Can now create PyroURI instances from PYROLOC: and PYRONAME: uris. The instance will be the actual URI, after performing the lookup. Not very useful actually, because we used to do the equivalent proxy=Pyro.core.getProxyForURI('PYRONAME://.......') Now you can also do proxy=Pyro.core.PyroURI('PYRONAME://.......').getProxy()
  • Added two minimalist examples in the manual, to show how easy Pyro is :-)
  • Name Server, Logger and listdir are now thread-safe (oops, they weren't before).
  • Event Server no longer requires threads, checks if it is already running, and has new '-i' command line option to specify the required authentication passphrase.
  • Name Server checks at startup if it is not already running in the network segment. Unless you use the new '-m' command line option, it refuses to start if another NS is detected.
  • Name Server has new '-i' command line option to specify the required authentication passphrase.
  • setup.py script can now be run unattended (for automated installs) by editing setup.cfg
  • Added stresstest example (stresses the Name Server and the Event Server). Good for stability check.
  • Pyro objects can now access Thread Local Storage by calling self.getLocalStorage(). This is an empty class to store your stuff into. It has one attribute, caller, that is the TCPConnection of the calling object.
  • Renamed "Mobile Agent" to "Mobile Object" where appropriate. Mobile Agents are a special kind of Agent, and an Agent is a very special piece of software, and most mobile code that we're talking about isn't an agent.
  • Added process ID and thread name info to logging messages.
  • Fixed setup script, creation of RPM should now work (python setup.py bdist_rpm).
  • Added "circle" example to show circular calling patterns.
  • Added "quickstart-noNS" example, like the "quickstart" example but this one doesn't use the NS.
  • Improved "callback" example and documentation about Callbacks.
  • Promoted remote.py and remote_nons.py (from the "quickstart[-noNS]" examples) into the Pyro library: there is a new package Pyro.ext that contains them. They still have to be documented in this manual though.
  • PyroURI objects are now correctly hashable, so you can use them as keys in dictionaries. The uniqueness is determined by the string representation of the oject.
  • Documented the fact that MyObject.attribute.subattribute won't work in some cases, and extended the attributes example a bit.
  • Fixed problem with deleting DynamicProxy in case of invalid URI.
  • More troubleshooting tips added.
  • Documented deadlock with object conversation problem (in Features chapter).
  • When mobile code is not enabled, the remote invocation doesn't use the import wrapper class (5% speed improvement)
  • Fixed shell scripts to allow quoted arguments such as: ns -i "the id string"
  • URI parsing is stricter (could get in loop with certain invalid URI strings)

<previous | contents Pyro Manual