2016-03-22 9 views
1

私はThreadPoolExecutorロギング? (パイソン)

with futures.ThreadPoolExecutor(max_workers=2) as executor: 
    for function in functions: 
     executor.submit(function) 

どのように私は現在、エグゼキュータによって処理されている機能ログしまうように見えるいくつかのコードを持っていますか?私はや関数内からログインする機能があってもなくてもよい - エグゼキュータ自体が

print "handling process {i}".format(i=current_process) 

これをアプローチする方法上の任意の考えのようなものをログに記録する必要があるのでしょうか。

答えて

1

私は、これは少し古いですね、私が質問を偶然見つけ、私は中に答えを置くだろうと思った私は直前に関数を呼び出すと、ロガーのインスタンスを参照することができラッパーを使用:。

import logging 
import os 
import concurrent.futures 


logging.basicConfig(filename=os.path.expanduser('~/Desktop/log.txt'), level=logging.INFO) 
logger = logging.getLogger("MyLogger") 


def logging_wrapper(func): 
    def wrapped(*args, **kwargs): 
     logger.info("Func name: {0}".format(func.__name__)) 
     func(*args, **kwargs) 
    return wrapped 


def a(): 
    print('a ran') 


def b(): 
    print('b ran') 


with concurrent.futures.ThreadPoolExecutor(max_workers=2) as executor: 
    for func in [a, b]: 
     executor.submit(logging_wrapper(func))