В прошлом я решал эту проблему, сохраняя состояние задач в memcached и опрашивая (через Ajax), чтобы определить, когда задачи завершены.
Если вы пойдете этим путем, лучше всего, если вы всегда сможете «вручную» определить состояние задач, не просматривая memcached, поскольку всегда есть (тонкий) шанс, что memcache упадет или будет очищен иличто-то как задача выполняется.