2

次の方法で実装した、キュー内のデータを処理するためのアイドル状態のバックグラウンド プロセスがあります。この例で渡されるデータは単なる整数ですが、最大 1000 個の整数を含むリストを渡し、1 秒あたり最大 100 個のリストをキューに入れます。これは正しいアプローチですか、それともより複雑な RPC およびサーバー メソッドを検討する必要がありますか?

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()
4

1 に答える 1

0

データの処理にかかる時間によって異なります。データのサンプルがないので何とも言えませんが、負荷分散、稼働時間の保証、スケーラビリティなどが必要な場合は、より精巧な RPC およびサーバー メソッドに移行することをお勧めします。これらによって複雑さが増し、アプリケーションのデプロイ、デバッグ、保守が難しくなる可能性があることを覚えておいてください。また、タスクを処理するのにかかるレイテンシーも増加します (これは、問題になる場合とそうでない場合があります)。

いくつかのサンプル データを使用してテストし、複数のサーバーが提供するスケーラビリティが必要かどうかを判断します。

于 2012-07-09T09:29:39.497 に答える