Работа Cache-mem с помощью Queue в Python

Я написал код для имитации работы кэш-памяти.

В этой модели я пытаюсь реализовать FIFO-алгоритм, который позволяет нам удалить последний неиспользуемый элемент (данные, значение, что угодно).

Я написал специальную функцию, которая дает мне список o с номерами (эти номера являются адресами в памяти).

q=Queue.Queue(800)# Cache - memory. This is a queue which is more likely help me to simulate FIFO-algorithm
QW=[] # External memory
l=raw_input("Enter a desire operation:")#I enter my operation.
for i in range(len(o)):
    time.sleep(0.4)
    u = time.time()
    k=o.pop(0) #o - is the list with numbers (these numbers are addresses in memory). Here I get each address through pop.
    while l=='read': #If operation is "read" then i need to get my adress from q (cache-mem) or from QW (Is the external memory) and put it in q - (is the Cache-memory).
        if k not in q:
            if j in QW and k==j:
                q.put(j)
        else:
            q.get(k)
    while l=='record':#If operation is "record" then i need to write (append to QW) an address in QW or q, but only if the same address have existed already in QW or q.
        if k not in q:
            QW.append(k)
            print QW
        else:
            q.put(k)
    print q.get()

Но я получаю ошибку:

TypeError: argument of type 'instance' is not iterable at line
  if k not in q

1 ответ

  1. Вы не можете сделать это с очередями, я думаю, вместо этого используйте коллекции.dequeue, которые почти похожи в то время как коллекции имеют fast append(), pop(). Вы можете изменить первую строку кода на q=collections.deque([],800)q и вместо него.put, q.получите пользуq.append,q.popleft().