for语句中的动态数组

时间:2014-02-12 07:12:52

标签: python c++ django algorithm data-structures

我有一个包含大量记录的数据库和一个带有 Django 框架的代码。现在我在该数据库上运行查询并在列表中收集结果。每条记录都有一个名为 priority 的字段,然后使用for语句按照该优先级逐个处理它们。但我有一个问题。

我的数据库非常动态,当我处理当前列表时,我可能在数据库中有一个具有更高优先级的新记录!我必须首先处理它,但它当前的架构,我不能,我必须等待终止当前列表进程。我怎么能实现我的目标?

我有另一种方法,但我不确定这是最好的方法。在while语句中,我可以对数据库运行查询,并且只获取一个具有更高优先级的记录。

您对我的替代解决方案有何看法?还有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

如WhozCraig所说,您可以使用treading来获取使用Queue处理或子处理高优先级数据的线程。 这是一个如何看起来的例子。如果你想使用多个线程和更多的函数而不仅仅是run(),你必须重新定义调用thread1_high_priority = High_priority_Thread(1,10,queue)#的线程对象,其中参数在run()中被定义为  thread1_high_priority = High_priority_Thread(target = functionname,name = name)#和 init 相同,def init (self,target,name):.

import Queue
import threading
import time


queue = Queue.Queue()

class High_priority_first(threading.Thread):
    """ a threading class"""

    def __init__ (self, start, stop, queue):


        self.start = start
        self.stop = stop
        self.queue = queue
        threading.Thread.__init__(self)

# Write a function, run(), that counts the higher priority data and extend it to
# also count lower priority, or create another function for low priority data and
# run them with a separate thread than thread 1.

    def run(self):
        while True:
            if self.start != stop:
                self.start += 1
                self.queue.put(self.start)

            else:
                break


thread1_high_priority = High_priority_Thread(1, 10, queue)# start at 1 and stop at 10
thread1_high_priority.start() #start thread1

thread2_lower_priority = High_priority_Thread(1, 3, queue)# start at 1 and stop at 3
thread2_lower_priority.start() #start thread2

while True:
    if queue != None: # check that queue isn't empty
        out =  queue.get()
        print out

    else:
        break