Следующий код не работает для меня должным образом.Это требует запуска ppserver на другом компьютере в вашей сети, например, с помощью следующей команды:
ppserver.py -r -a -w 4
После запуска этого сервера на моем компьютере я запускаю этот код:
import pp
import time
job_server = pp.Server(ppservers = ("*",))
job_server.set_ncpus(0)
def addOneBillion(x):
r = x
for i in xrange(10**9):
r+=1
f = open('/home/tomb/statusfile.txt', 'a')
f.write('finished at '+time.asctime()+' for job with input '+str(x)+'\n')
return r
jobs = []
jobs.append(job_server.submit(addOneBillion, (1,), (), ("time",)))
jobs.append(job_server.submit(addOneBillion, (2,), (), ("time",)))
jobs.append(job_server.submit(addOneBillion, (3,), (), ("time",)))
for job in jobs:
print job()
print 'done'
Странная часть: просматривая /home/tomb/statusfile.txt, я вижу, что он записывается несколько раз, как будто функция запускается несколько раз.Я наблюдал, как это продолжается более часа назад, и никогда не видел возврата job()
.
Odder: Если я изменю количество итераций в определении testfunc на 10 ** 8, функция просто запускается один раз и возвращает ожидаемый результат!
Похоже, что-то вродесостояние гонки?Просто использование локальных ядер работает нормально.Это с pp v 1.6.0 и 1.5.7.
Обновление: около 775 000 000: я получаю противоречивые результаты: два задания повторяются один раз, в первый раз завершается.
Обновление через неделю:Я написал свой собственный модуль параллельной обработки, чтобы обойти это, и буду избегать параллельного Python в будущем, если кто-то не поймет это - я найду время посмотреть на него еще немного (фактически углубляясь в исходный код) в некоторыхточка.
Месяц спустя обновление: не осталось обид, Parallel Python.Я планирую вернуться назад, как только у меня будет время для переноса моего приложения.Редактирование заголовка для отражения решения.