나는 형태파이썬 멀티 속도 문제
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 코어에서 실행하는 것보다 훨씬 빠르다는 것을 알 수 있습니다. 그러나 비슷한 결과가 나타납니다. 모든 종류의 도움을 주시면 감사하겠습니다.
이 대기열 어쩌면 스레드 큐 (가져 오기 큐) 대신 멀티입니다 하나? (멀티 프로세싱 가져 오기 대기열에서) –
나는 여전히 멀티 프로세싱을 배우고 있지만 멀티 스레딩을 사용하는 경우 해당 프로세서를 중심으로 한 작업은 속도가 향상되지 않습니다. 전에 수영장을 썼다고 말한 건 알지만 어쩌면 다시 들여다 볼 수도 있습니다. –
@HugoWalter 해당 가져 오기 대기열이 없습니다. –