python与队列,字典,浮动和多个文件的麻烦

时间:2014-09-27 18:59:04

标签: python

我遇到浮点值和dicts队列的问题。 我真的不知道发生了什么事。让我说清楚:

这是一个名为cqueue.py的文件:

from collections import deque
def DestroyQueue(q):
        while LenQueue(q) >0:
                q.popleft()

def GetQueue(q):
        item=q.popleft()
        AddQueue(q,item)
        return item

def AddQueue(q,tdict={}):
        q.append(tdict)

def LenQueue(q):
        return len(q)


rcv_queue= deque()
can_queue= deque()

经过一些处理数据后,我的rcv_queue充满了大量的dicts。每个字典都有很多值(约30对或更多)。

现在,在一个名为" match.py​​"的新文件中,我有一个这样的例程:

qlen=LenQueue(rcv_queue)
while qlen>0:
    pdict = {}
    pdict = GetQueue(rcv_queue)
    #THINGS
    if something
        AddQueue(can_queue,pdict)
    qlen-=1
DestroyQueue(rcv_queue)
DbSimCases()

这"#THINGS"是关于处理每个字典和每对数据,新的字典(pdict)存储在can_queue上,它具有较小的大小(大约5个dict,超过50对)。 调用DestroyQueue来弹出所有dict并销毁rcv_queue,它不再使用了。 因此调用DbSimCases()来捕获can_queue(来自cqueue.py)并存储在mysql数据库中。 问题是: 在match.py​​上,dict float值一切正常,但是当从DbSimCases(第三个名为base.py的文件)调用can_queue时,浮点值会发生变化。 为了发现这个问题,我使用了这样的打印:

---在match.py​​上

qlen=LenQueue(rcv_queue)
while qlen>0:
    pdict = {}
    pdict = GetQueue(rcv_queue)
    #THINGS
    if something
        AddQueue(can_queue,pdict)
        o=GetQueue(can_queue)
        print "pdict->args_score: " + str(p_args_score)
        print "queue->args_score: " + str(o['p_args_score'])
    qlen-=1
DestroyQueue(rcv_queue)
DbSimCases()

------ /结束

---在base.py上

def DbSimCases()
    clen=LenQueue(can_queue)
    while clen > 0:
        pdict2={}
        pdict2=GetQueue(can_queue)
        print "pdict2->args_score: " + str(pdict2['p_args_score'])

所以结果应该是相同的浮动3次。但我得到了这个:

pdict->args_score: 1.8
queue->args_score: 1.8
pdict2->args_score: 0.0

这里是整个pdict和pdict2(逐行排序和匹配,以查看如上所述的许多问题):http://pastebin.com/ZffTMGxq

有人可以帮助我吗?我有什么问题吗? 谢谢,每一个帮助都将非常感激。

1 个答案:

答案 0 :(得分:0)

我修好了。

我在match.py​​上创建了第三个dict:

qlen=LenQueue(rcv_queue)
while qlen>0:
  pdict = {}
  pdict = GetQueue(rcv_queue)
  auxdict={}
  #THINGS
  if something
    auxdict['key']=pdict['key']
    AddQueue(can_queue, auxdict)
  qlen-=1
DestroyQueue(rcv_queue)
DbSimCases()

它充当辅助词典,只有几个选定的词组。 Pdict有许多我不想要的东西,使用相同的dict传递给新的,是一个错误的决定和实践。