 <p>First let my say that I have not used APScheduler myself yet, and have next to no knowledge about running Python servers (or anything else really) on Windows and IIS. <br> So I can only guess here, but it seems clear that your problem is related to APScheduler in a way. I could imagine that something goes wrong in a thread that APScheduler uses for your background tasks, and the hanging thread brings down your whole application, due to the GIL (global interpreter lock in Python). This could for example happen when your thread(s) run into some kind of race condition. Maybe it happens that processing starts before the previous iteration has finished processing. Or you get a really big backlog, and that leads to problems when processing starts.</p> <p>Anyway, I think task queues are much better suited for background processing in web applications, because they run separately and out of the context of your web server. You can schedule a task as soon as it's triggered by some user action, and it will be processed as soon as a worker is available, and not be deferred until a certain point in time.<br> I would recommend to give <a href="http://celeryproject.org/" rel="nofollow">Celery</a> a try, but there are also other solutions available, many based on Redis.</p> <p>Celery is really powerful, and has advanced features like periodic tasks and crontab style schedules - so you can probably use it to do what you are doing using APScheduler now.</p> <p>This looked very helpful for setting up Celery under Windows: <a href="http://mrtn.me/blog/2012/07/04/django-on-windows-run-celery-as-a-windows-service/" rel="nofollow">http://mrtn.me/blog/2012/07/04/django-on-windows-run-celery-as-a-windows-service/</a> <br> This may also prove helpful: <a href="http://stackoverflow.com/questions/9378932/how-to-create-celery-windows-service">How to create Celery Windows Service?</a> <br>Note: I haven't tried any of these myself, since I use Linux if I have a choice.</p> <p>It's probably also possible to get APScheduler to work correctly, but I think it will be much easier to use Celery, because if a problem occurs in a worker you will be able to debug it much easier than a problem occuring in a background thread. Celery can also be configured to automatically send you email in case of an error.</p>