我有一个包含大量记录的数据库和一个带有 Django 框架的代码。现在我在该数据库上运行查询并在列表中收集结果。每条记录都有一个名为 priority 的字段,然后使用for语句按照该优先级逐个处理它们。但我有一个问题。
我的数据库非常动态,当我处理当前列表时,我可能在数据库中有一个具有更高优先级的新记录!我必须首先处理它,但它当前的架构,我不能,我必须等待终止当前列表进程。我怎么能实现我的目标?
我有另一种方法,但我不确定这是最好的方法。在while语句中,我可以对数据库运行查询,并且只获取一个具有更高优先级的记录。
您对我的替代解决方案有何看法?还有更好的方法吗?
答案 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