0

나는 형태파이썬 멀티 속도 문제

while x<lat2[0]: 
    while y>lat3[1]: 
     if (is_inside_nepal([x,y])): 
      print("inside") 
     else: 
      print("not") 
     y = y - (1/150.0) 
    y = lat2[1] 
    x = x + (1/150.0) 
#here lat2[0] represents a large number 

의 중첩 for 루프 지금이 정상적으로을 실행하기위한 주변 50 소요 있습니다. 그리고이 루프를 다중 처리 코드로 변경했습니다.

def v1find_coordinates(q): 
    while not(q.empty()): 

    x1 = q.get() 
    x2 = x1 + incfactor 
    while x1<x2: 
     def func(x1): 
      while y>lat3[1]: 
       if (is_inside([x1,y])): 
        print x1,y,"inside" 
       else: 
        print x1,y,"not inside" 
       y = y - (1/150.0) 

     func(x1) 
     y = lat2[1] 
     x1 = x1 + (1/150.0) 

incfactor = 0.7 
xvalues = drange(x,lat2[0],incfactor) 
#this drange function is to get list with increment factor as decimal 
cores = mp.cpu_count() 
q = Queue() 
for i in xvalues: 
    q.put(i) 
for i in range(0,cores): 
    p = Process(target = v1find_coordinates,args=(q,)) 
    p.start() 
    p.Daemon = True 
    processes.append(p) 
for i in processes: 
    print ("now joining") 
    i.join() 

이 멀티 코드 는 약 50 실행 시간 걸립니다. 즉, 에는 두 시간의 차이가 없습니다.

또한 풀을 사용해 보았습니다. 나는 또한 청크 크기를 관리했다. 내가 봤 거든 다른 stackoverflow 통해 검색했습니다. 그러나 만족스러운 답을 찾을 수 없습니다.

내가 찾을 수있는 유일한 대답은과 같은 결과를 만들기 위해 프로세스 관리에서 시간이 찍혔습니다. 이것이 이유 인 경우 더 빠른 결과를 얻기 위해 다중 처리 작업을 어떻게 얻을 수 있습니까?

파이썬에서 C로 구현하면 더 빠른 결과를 얻을 수 있습니까?

나는 과감한 결과는 기대하지 않지만 상식적으로 4 코어에서 실행하는 것이 1 코어에서 실행하는 것보다 훨씬 빠르다는 것을 알 수 있습니다. 그러나 비슷한 결과가 나타납니다. 모든 종류의 도움을 주시면 감사하겠습니다.

+0

이 대기열 어쩌면 스레드 큐 (가져 오기 큐) 대신 멀티입니다 하나? (멀티 프로세싱 가져 오기 대기열에서) –

+0

나는 여전히 멀티 프로세싱을 배우고 있지만 멀티 스레딩을 사용하는 경우 해당 프로세서를 중심으로 한 작업은 속도가 향상되지 않습니다. 전에 수영장을 썼다고 말한 건 알지만 어쩌면 다시 들여다 볼 수도 있습니다. –

+0

@HugoWalter 해당 가져 오기 대기열이 없습니다. –

답변

0

스레드 대기열 (대기열 가져 오기 대기열에서)을 사용하고있는 것 같습니다. 프로세스가 포크를 (사용하기 때문에이 예상대로 작동하지 않습니다)와 각 작업자 프로세스로 전체 큐 클론

사용 :

from multiprocessing import Queue

+0

다중 처리 가져 오기 대기열 가져 오기 대기열에서 수행했습니다. –