As a side note, I do not like the fact that Xron requires you to use special DTML methods. I suppose this is a requirement in this architecture due to the fact they need to be autocataloged, but I don't really like that feature either :-).
I think Xron could work with anything that has "trigger" and "disarm" methods, that gets put into the Schedule catalog.
I guess I'm not real real hot on the dependency on a catalog at all. I'm having a hard time imagining a situation where you have so many events that you need to index them -- especially using a ZCatalog. It just seems like too many moving parts and overkill for the job. :-)
Xron has a single dispatcher thread. This thread knows how long to sleep for until the next job needs to run.
Do you think this is this any more effective than having a producer thread do a lookup every minute to see what jobs are current, after which it should put the current jobs in a queue?
What if you want a small job to be done every 30 seconds?
I generally don't... I'm satisfied with cron granularity, although others might not be. Do you have this requirement?
It uses Client.py to run a job.
Why is this? This doesn't make any sense to me on its face. Why not just call the method from a separate thread?
Which separate thread? Do you create a new ZODB thread? That sounds as if it might use quite a few resources.
Is there a Zope API for making ZODB threads call methods on objects, as signalled by other threads? I'm guessing the easiest way to do that is to use Client.py to make a new http request.
Well... AFAIK, there is no such thing as a ZODB thread... there are a number of Python threads used by Zope. We'd just fire off another one to perform a task as part of the thing that takes an event off the queue. This might be naive. I need to try it.
I'd really like to see a scheduler as a standard part of Zope. I think it would be good to have scheduled methods called from within Zope, rather then going through http. I don't know enough about how ZPublisher/ZODB works to know where to start this though.
I'll need to try to call get_transaction().commit() from a manually-constructed Python thread fired off from Zope and see what happens. I think it'll just work. I'll find out in a few minutes. :-)