Я имею дело с задачей, связанной с ЦП, и пытаюсь использовать многопроцессорный модуль на моем сервере для ускорения вычислений.Конфигурация выглядит следующим образом:
- система: Windows Server 2008 r2
- ОЗУ: 32 г ОЗУ
- ядро: (Intel E5-2643 v2 @ 3,5 ГГц) *12
- Среда: Pycharm & python 3.6
Когда я открываю более 4 ядер, окно сообщений об ошибках продолжает появляться и говорит, что python перестает работать с именем модуля сбоя StackHash_1dc2.Кажется, это проблема одного подпроцесса, потому что другой подпроцесс работает нормально, но с этой ошибкой основной процесс не может завершиться автоматически.Проблема в том, что если я запускаю один и тот же код 5 раз подряд, ошибка может произойти только в 2 раза, поэтому я считаю, что это не ошибка, а нечто гораздо более худшее.
Однако,Я не смог воспроизвести ошибку на моем собственном компьютере, потому что он имеет только 4 ядра.Я знаю, что глупо использовать многопроцессорность в Windows, но я не могу изменить систему на сервере.Что я могу сделать, чтобы сделать это правильно?
Ниже приведен только пример кода, который может возникнуть проблема на моем сервере:
import multiprocessing
import pandas as pd
from scipy import stats
def func(msg):
print('Hello, ', msg)
a = []
for i in range(50):
I = 200000
S = pd.DataFrame([0.03] * I)
d1 = (0.04 - S[0]) / 0.004
p = stats.norm.cdf(d1, 0, 1)
a.append(p.sum())
print('Goodbye,', msg)
def run():
if __name__ == '__main__':
multiprocessing.freeze_support()
pool = multiprocessing.Pool(processes=11)
for i in range(20):
msg = '%d' % (i)
pool.apply_async(func,(msg, ))
print('Mark~~~~~~~~~~~~~~~')
pool.close()
pool.join()
print('sub-process done')
if __name__ == '__main__':
run()