2017-09-21 6 views
0

나는로그인 프로세스 출력

import time 
from multiprocessing import Process 

class ParallelExecutor(object): 
    def __init__(self, pool_size=10): 
    self._pool_size = pool_size 
    self._processes = [] 
    self._results = [] 

def add_task(self, target, args=None, kwargs=None): 
    args = [] if not args else args 
    kwargs = {} if not kwargs else kwargs 
    index = len(self._processes) 
    process_args = (index, target, args, kwargs) 
    process = Process(target=self._executor, args=process_args) 
    self._processes.append(process) 
    result = {'result': None, 'end_time': 0, 'completed': False} 
    self._results.append(result) 
    return index 

def run(self, block=True): 
    if not block: 
     for process in self._processes: 
     process.start() 
     return None 
    else: 
     counter = 0 
     processes = [] 
     for process in self._processes: 
     processes.append(process) 
     process.start() 
     if counter >= self._pool_size: 

      # Wait for completion and reset counters. 
      for i in range(len(processes)): 
      processes[i].join() 
      processes = [] 
      counter = 0 
      continue 
     counter += 1 

     # Wait for the left over processes to complete. 
     if len(processes) > 0: 
     for i in range(len(processes)): 
      processes[i].join() 
     return self._results 



def _executor(self, index, target, args, kwargs): 
    try: 
     self._results[index]['result'] = target(*args, **kwargs) 
     self._results[index]['end_time'] = int(round((time.time()))) 
     self._results[index]['completed'] = True 
    except Exception as exc: 
     self._results[index]['exception'] = exc 
     self._results[index]['completed'] = True 
     raise 

내가 동시에 여러 프로세스를 실행하는 데 사용하는 다음 parallel_executor.py 모듈을 가지고 (example.py) 다음과 같이 나는 그것을 사용

from framework.lib.parallel_executor import ParallelExecutor 
import time 
import os 

def foo(x): 
    for i in range(3): 
     print x 
     time.sleep(0.5) 

    return 123 

def main(): 
    runner = ParallelExecutor() 
    runner.add_task(foo, ["This"]) 
    runner.add_task(foo, ["is"]) 
    runner.add_task(foo, ["a"]) 
    runner.add_task(foo, ["test"]) 

    runner.run() 
    runner.wait_for_executor_to_finish() 
    for i in runner.get_results(): 
     print i 

main() 

내 질문에 어떻게 'foo'의 모든 진술과 함께 프로세스 ID를 인쇄하려면 parallel_executor.py 모듈 만 변경하고 example.py 파일은 수정하지 않아서 결과물에 출력됩니다. 나중에 수행 할 수 있습니다. 특정 프로세스의 출력에 'grep'.

답변

0

예제를 수정하지 않고는 할 수 없지만 아주 작은 수정으로 원하는 것을 얻을 수 있습니다.

시설 파이썬 logging 시설을 사용하면 모든 로그 라인이 표준을 준수하도록 기본 로그 메시지를 설정할 수 있습니다.

print x 

과 : 라인 교체 예에서

import logging 

log_format = "%(process)d: %(message)s" 
logging.basicConfig(level=logging.INFO, format=log_format) 

:

logging.info(x) 

을 그리고 당신은 당신의 메시지로 나타나는 표시되는 parallel_executor.py에서

는 다음을 추가 :

34321: message content here