Q:

How can I pop() lots of elements from a deque?

I have a deque object what holds a large amount of data.  I want to extract, say, 4096 elements from the front of the queue (I'm using it as a kind of FIFO).  It seems like there should be way of doing this without having to iterate over 4096 pop requests.
Is this correct/efficient/stupid?
A = arange(100000)
B = deque()
C = [] # List will do 
B.extend(A) # Nice large deque

# extract 4096 elements
for i in xrange(4096):
   C.append(A.popleft())

A:

There is no multi-pop method for deques.  You're welcome to submit a feature request to bugs.python.org and I'll consider adding it.
I don't know the details of your use case, but if your data comes in blocks of 4096, consider storing the blocks in tuples or lists and then adding the blocks to the deque:
block = data[:4096]
d.append(block)
...
someblock = d.popleft()

A:

Where you're using a deque the .popleft() method is really the best method of getting elements off the front.  You can index into it, but index performance degrades toward the middle of the deque (as opposed to a list that has quick indexed access, but slow pops).  You could get away with this though (saves a few lines of code):
A = arange(100000)
B = deque(A)
C = [B.popleft() for _i in xrange(4096)]

