2017-11-27 7 views
0

BaseManagerを使用してキューを共有しています。ロギングのためのキューリスト。これはLinux上でうまく動作しますが、次のコードのウィンドウでは「サーバの取得」というメッセージが表示されますが、「サーバに接続された」ログメッセージは表示されません。その間の唯一の行は、BaseManager.get_server()の呼び出しです。どうして?それは修正できますか?BaseManagerのロギングが停止するのはなぜですか?

def server(eventq, logq): 
    """ publish event queue """ 
    log = logging.getLogger() 
    log.handlers = [QueueHandler(logq)] 

    BaseManager.register('get_eventq', callable=lambda: eventq) 
    m = BaseManager(address=('', config["port"]), authkey=config["authkey"]) 
    log.info("getting server") 
    try: 
     s = m.get_server() 
    except: 
     log.exception() 
    log.info("got server") 
    s.serve_forever() 


def listener(eventq, logq): 
    """ listener for event queue """ 
    log = logging.getLogger() 
    log.handlers = [QueueHandler(logq)] 

    log.info("starting listener") 
    while True: 
     p = Process(target=callback, args=(eventq.get(),)) 
     p.start() 


def main(): 
    """ setup queue and listen for events 
    """ 
    # logging queue 
    log = logging.getLogger() 
    logq = Queue() 
    l = QueueListener(logq, *log.handlers) 
    l.start() 
    log.handlers = [QueueHandler(logq)] 

    # server for event queue 
    eventq = Queue() 
    p = Process(target=server, args=(eventq, logq)) 
    p.start() 

    # listener 
    log.info("starting listener process") 
    p = Process(target=listener, args=(eventq, logq)) 
    p.start() 

    p.join() 

答えて

0

私は(同時実行は注意が必要です)間違ったつもり場所を正確にわからないんだけど、あなたは、ロギングドキュメントで推奨されていない事をやっています。たとえば、log.handlersに直接割り当てることはできませんが、addHandler APIを使用してください。マルチプロセッシングのためのWindowsとLinuxモデルは異なっていることを覚えておいてください.Linuxはフォークを使いますが、Windowsはフォークしません。私はあなたの問題がロギングに関連しているとは思っていませんが、基礎をなすマルチプロセスのインスタンス化についてはさらに詳しく考えています。クックブックの例には、キューを使用するan example of multiprocessing with loggingがあり、ニーズに合わせることができます。

+0

ありがとうございました。私はqueuelistenerを使用しているレシピの1つに従っています。ハンドラをQueueHandlerに置き換えたいので、ハンドラに直接割り当てています。 addHandlerを使用すると、既存のハンドラがまだ存在し、各ログメッセージが繰り返されることになります。上記のコードで、get_serverの後にsys.stdout.flush()を追加すると、ログメッセージが正しく出力されますが、その理由はわかりません。 – simon

関連する問題