cylc/cylc — pull request #805 by benfitzpatrick (2013-12-05 12:55:38+00:00)
Title: cylc daemon performance boosting

This increases the performance of the daemon under heavy task load and when just waiting around.

There were a couple of notable bottlenecks:
* calls to `task.is_cycling()` (done so often that the Python function overhead is an issue):
* replaced by `task.is_cycling` boolean (and similar)
* prerequisite checking, including getting the tags:
* tag-getting is now done less often and stored
* runahead time computation calls:
* number of calls reduced - also see time comparison tests
* `state_summary` calculation for each task:
* most state_summary information now cached (where unchanging)
* `ETC` computation is now done by the GUI
* time string comparison tests, in particular where the string first had to be converted to a `ct` object:
* decorated function now used to cache time string comparisons (this will be an
even bigger optimisation once isodatetime is done)

The change also adds a `--profile` option to cylc run, which can be used to switch on CPU time and job queue profiling (maybe we could add more later).