Ich habe einen untätigen Hintergrundprozess, der Daten in einer Warteschlange verarbeitet, die ich wie folgt implementiert habe. Die Daten, die in diesem Beispiel übergeben werden, sind nur Ganzzahlen, aber ich werde Listen mit bis zu 1000 Ganzzahlen übergeben und bis zu 100 Listen pro Sekunde in die Warteschlange stellen. Ist dies der richtige Ansatz, oder sollte ich mich mit aufwendigeren RPC- und Server-Methoden befassen?
import multiprocessing
import Queue
import time
class MyProcess(multiprocessing.Process):
def __init__(self, queue, cmds):
multiprocessing.Process.__init__(self)
self.q = queue
self.cmds = cmds
def run(self):
exit_flag = False
while True:
try:
obj = self.q.get(False)
print obj
except Queue.Empty:
if exit_flag:
break
else:
pass
if not exit_flag and self.cmds.poll():
cmd = self.cmds.recv()
if cmd == -1:
exit_flag = True
time.sleep(.01)
if __name__ == '__main__':
queue = multiprocessing.Queue()
proc2main, main2proc = multiprocessing.Pipe(duplex=False)
p = MyProcess(queue, proc2main)
p.start()
for i in range(5):
queue.put(i)
main2proc.send(-1)
proc2main.close()
main2proc.close()
# Wait for the worker to finish
queue.close()
queue.join_thread()
p.join()