As Martin Konecny's answer explains, your loop requires calculating all the primes up to sys.maxint, which takes a very, very long time (especially if you're on a 64-bit platform!).
But really, you don't need primes up to sys.maxint, or even primes up to 10000. With his solution, you're going to calculate the first 1229 primes even if you only need the first 7, which means it'll take way longer than necessary. Worse, you're only going to calculate the first 1229 primes, even if you need the 1400th, which means you'll end up in an infinite loop looking for the next prime under 10000 forever even though there are no more primes under 10000.
The key here is to break out of the inner loop as soon as possible, so you can get back to the outer loop. The inner loop is checking whether you have a big enough prime, which isn't relevant to your problem; the outer loop is checking whether you have enough primes. So you want to check the outer loop after each prime that you find.
One way to do that is to change the inner loop so it just breaks out after one prime, giving you a chance to check the len again:
while len(primes) < counter:
for i in xrange(primes[-1], sys.maxint):
if is_prime(i):
primes.append(i)
break
In fact, if you do this, you can even replace the limit with an infinite range, and it will still complete.
One more thing: You have a bug in the inner loop: xrange(primes[-1], sys.maxint) includes primes[-1]. And primes[-1] is obviously prime. So, you're just going to keep appending the same value over and over. You need a + 1 there.
So:
while len(primes) < counter:
for i in itertools.count(primes[-1]+1)
if is_prime(i):
primes.append(i)
break
A better solution to this problem would be to use a real prime sieve rather than a divisor test. A sieve effectively keeps a lookahead mapping of the next multiples of each prime found so far, so you can very quickly determine whether N is prime if you've already checked all the values up to N-1. But doing that is a much larger answer. :)