У меня есть вложенный цикл for
формы
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
Теперь это обычно занимает около 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 из Python более быстрые результаты?
Я не ожидаю радикальных результатов, но по здравому смыслу можно сказать, что работа на 4 ядрах должна быть намного быстрее, чем работа на 1 ядре. Но я получаю аналогичные результаты. Любая помощь будет оценена по достоинству.