I once dealt with this problem by giving each proxy N chances to fail, and after one reached N failures, I'd remove it from the list. It was a pound of cure rather than an ounce of prevention, but it more or less did the job. This method was used in a program where I was hitting 60-100 proxies at a time, so having a few not working at any given moment wasn't of high importance as long as things settled out eventually.