2014-03-28 2 views
2

나는 파이썬에서 threading 모듈을 사용하고 있으며 튜토리얼 here을 읽었습니다. 내 의도 한 프로그램의 흐름은 내가이 기능 foo()bar()이 있고 다음은멀티 쓰레딩 파이썬 : 쓰레드 통신

1) foo() 실행을 발생하고 정지 data에 저장된 일부 데이터를 수집하는 것입니다.

2) bar()data을 사용하여 연속적으로 실행됩니다.

3) 2 foo() 실행 다시 분 및 업데이트 후 databar() 동안 data의 이전 버전을 사용하여 실행하고 있습니다.

4) 업데이트 후 bar()은 새 버전의 데이터 사용을 시작합니다.

5) 루프 백 (3)

지금이 별도의 스레드로 실행하려는 내 문제는 실행이 완료 및 data의 새 버전을 사용할 수 bar()에게 foo() 않는 방법에있다?

Queue에 대해 읽었지만 정확하게이 인스턴스에서 사용하는 방법을 볼 수 없습니다.

+0

어떻게 'bar'가 데이터를 사용합니까? 그것은 그것을 계속해서, 또는 한 번 이상 사용합니까? 한 번만 입력하면'Queue' 나'Pipe'가 작동합니다. –

답변

1

막대가 데이터를 소비하는 방법에 따라 다릅니다. bar가 기존 데이터 나 새로운 데이터를 사용할 수있는 자연스러운 지점을 가지고 있으면 foo로 채워진 큐를 읽을 수 있습니다.

def foo(bar_q): 
    while True: 
     data = get_some_data() 
     # copy or deepcopy if foo will be updating data instead of fetching new 
     bar_q.put(copy.copy(data)) 
     time.sleep(120) 

def bar(bar_q): 
    # wait for the first data 
    data = bar_q.get() 
    bar_q.task_done() 
    while True: 
     process_some_data(data) 
     try: 
      # get new data if available 
      data = bar_q.get_nowait() 
      bar_q.task_done() 
     except Queue.Empty: 
      pass 
+0

감사합니다. 스레딩을하면서 머리를 쓰려면 시간이 좀 걸렸지 만 작동하는 것! – rwolst