Asynchronous Generators in Action
Now that the asyncgen library is in good shape, I've used it to rewrite the Wide Finder code. The resulting implementation is short, readable and potentially fast. I've added a few missing features to asyncgen in the process: a generator_splitter function (it takes in a generator of dicts/lists and splits it out into several generators) and some glue code for passing data in temporary files.
Then came the time to test my shiny new implementation on the T2000. Here it failed miserably, using up exactly one core. The reason? I'm not sure, so I've added some profiling code to asyncgen. Now it logs when worker threads start working, when they request input, when they send back output, etc. If I can get this information into a graphical format, it should provide a nice timeline of activity in the program.
In the mean time I've updated the git repository for asyncgen. It's not human-browsable at the moment, you need to clone it locally, so I've also uploaded the asyncgen.py module by itself.