У меня есть программа на Python, который создает пул многопроцессорной и вызывает процедуру Cythonized, что делает некоторые тяжелые вычисления вызова sin
, cos
, exp
, tan
, atan
от libc.math
и делать много leastsq оптимизаций. Без многопроцессорности все работает отлично.Multiprocessing вызывает Python аварии на Windows,
Если я использую multiprocessing.pool
на pool.join()
все процессы аварии с довольно бесполезное сообщение
Это приложение просил Runtime прекратить его в необычным способом. Обратитесь в службу поддержки приложения за дополнительной информацией .
Родительский процесс продолжает работать после этого, но при закрытии приложения он также сбой.
дамп содержит следующую информацию
Problem signature:
Problem Event Name: APPCRASH
Application Name: python.exe
Application Version: 0.0.0.0
Application Timestamp: 527fcf56
Fault Module Name: libgcc_s_dw2-1.dll
Fault Module Version: 0.0.0.0
Fault Module Timestamp: 4bc96cad
Exception Code: 40000015
Exception Offset: 00016646
OS Version: 6.1.7601.2.1.0.256.1
Locale ID: 1033
Additional Information 1: 9155
Additional Information 2: 9155109303dda76ab293160797d571e1
Additional Information 3: de56
Additional Information 4: de566ab6f110978dbca8423195800025
Обновления: Я сделал отдельный чек с вызовом фиктивной функции. Он все еще падает. С map, map_async, apply, apply_async. Это происходит только внутри моей программы. Простые сценарии пула работают.
код Бассейн находится за if __name__ == '__main__':
Это выглядит как-то «длл ад», но я не уверен, как и где, чтобы проверить это.
Я не думаю, что код здесь поможет, так как здесь встречается даже очень общий характер. Я все равно не могу опубликовать всю программу, так как она содержит графический интерфейс и три отдельных модуля. После удаления всех основного кода:
def func1(a):
print a
def ExtractStarData(self):
nprocs=2
if __name__ == '__main__':
print 'pool'
pool = Pool(processes=nprocs)
print 'results'
pool.map(func1, range(100))
print 'close'
pool.close()
print 'join'
pool.join() #crashes here
print 'ok'
я забыл упомянуть. Код (реальный, а не фиктивный) работает на OSX, но не на Win7!
Ваш код? – quant
Я понятия не имею, что произойдет, если вы положите 'if __name__ == '__main __':' в функцию. Вы уверены, что это не проблема? Как вы называете «ExtractStarData»? –
Произошла какая-то магия. Вчера, пробовав бесчисленное количество раз, чтобы сделать это, я расстроился, сделал этот пост и поставил свой компьютер на сны. Сегодня все работает! И да, я вчера перезагрузил свой компьютер. –