2017-04-23 7 views
0

여러 플롯을 열려고하는데 몇 가지 문제가 있습니다. 스레딩을 사용하여 플롯을 만들려고 시도했을 때, 파이썬은 먼저 여러 개의 윈도우를 열고 첫 번째를 제외한 모든 윈도우를 닫습니다.다중 처리 쇼 matplotlib 플롯

또 다른 질문으로는 내가 시도한 다중 처리를 사용하는 것이 좋습니다. 코드는 오류없이 실행되며 단지 플롯을 표시하지 않습니다.
저는 주 프로젝트로 옮기기 전에 뭔가 간단하게 작업하려고합니다.

# Import the necessary packages and modules 
import matplotlib.pyplot as plt 
import numpy as np 


#from threading import Thread 
import multiprocessing 

def plot(datax, datay, name): 
    # Prepare the data 
    x = datax 
    y = datay**2 
    # Plot the data 
    plt.scatter(x, y, label=name) 

    # Add a legend 
    plt.legend() 

    # Show the plot 
    plt.show() 



#plot(3,3,) 
''' 
for i in range(10): 
    t = Thread(target=plot, args=(i,i+1,i,)) 
    t.start() 
    ''' 
for i in range(2): 
    p = multiprocessing.Process(target=plot, args=(i, i, i)) 
    p.start() 

갱신 : 어떤 이유로 는 다중 다시 작동이 중지. 프로세스를 열려면 multP() 함수를 만들려고했지만 입력 ('value :')을 추가하면 작동하지 않습니다. scine 데이터를 특정 쓰레드로 보내는 방법을 알아낼 수 없다. dat = [[x, y0, y1, ... yn], [x, y0, y1, .. .yn], ...] 그리고 각 플롯 프로세스가 뭔가가 dat에 추가되었는지 확인합니다. 원하는

import matplotlib.pyplot as plt 
 
import numpy as np 
 

 
import multiprocessing 
 
#multiprocessing.freeze_support() # <- may be required on windows 
 

 
def plot(datax, datay, name): 
 
    x = datax 
 
    y = datay**2 
 
    plt.scatter(x, y, label=name) 
 
    plt.legend() 
 
    plt.show() 
 

 
def multiP(): 
 
    if __name__ == "__main__": 
 
     for i in range(2): 
 
      p = multiprocessing.Process(target=plot, args=(i, i, i)) 
 
      p.start() 
 
if True: 
 
    #input('Vlaue: ') # while commented plots are shown 
 
    multiP()

+0

멀티 프로세싱 또는 스레딩을 사용하는 목적은 무엇입니까? – ImportanceOfBeingErnest

+0

글쎄, 기본적으로 필자가 pyusb를 통해 얻은 데이터를 플롯 할 수 있어야하고 실시간으로 여러 그래프에 플롯 할 수 있어야한다. (또는 내가 얻을 수있는 한 가까이에) – user169808

+0

여기서 사용 된 다중 처리가 도움이 될지 의심 스럽다. 실시간 플로팅은 일단 시작되면 프로세스와 통신해야하기 때문에 가능합니다. – ImportanceOfBeingErnest

답변

0

다음 코드는 두 가지 수치를 생성한다.

import matplotlib.pyplot as plt 
import numpy as np 

import multiprocessing 
#multiprocessing.freeze_support() # <- may be required on windows 

def plot(datax, datay, name): 
    x = datax 
    y = datay**2 
    plt.scatter(x, y, label=name) 
    plt.legend() 
    plt.show() 

def multiP(): 
    for i in range(2): 
     p = multiprocessing.Process(target=plot, args=(i, i, i)) 
     p.start() 

if __name__ == "__main__": 
    input('Value: ') 
    multiP() 
+0

감사합니다. 코드 작업,하지만 다시 문제가 만났다. for 루프 앞에 x = input ('Value :')을 추가하면 이제 그래프가 다시 표시되지 않습니다. 루프에 print ('hi')를 추가하여 입력했는지 확인합니다 ( – user169808

+0

). 스크립트로만 실행되는 부분에 있어야합니다. 나는 답에 주석을 달았다. – ImportanceOfBeingErnest

+0

다시 입력은 스크립트로 사용될 때만 업데이트되는 코드의 일부 여야합니다. – ImportanceOfBeingErnest