static L websMadeByProgram_parallel(S progID) { // TODO: clean up file handle in case of error IterableIterator l = scanLog_iterator(progID, "webs-made.txt"); S src = progID; int poolSize = numberOfCores(), queueSize = 20; NotifyingBlockingThreadPoolExecutor e = new(poolSize, queueSize, 15, TimeUnit.SECONDS); L> webs; int i = 0; for (fS s : l) { ++i; final int _i = i; e.execute(r { pcall { SoftwareMadeWeb o = cast unstructure(s); Web web = o.web; if (web == null) web = (Web) unstructure(o.structure); if (web != null) webs.add(pair(web_intern(web_setSourceIfEmpty(web, src)), _i)); }}); } sortBySecondOfPairs_inPlace(webs); ret firstOfPairs(webs); }