Ошибка многопроцессорной обработки Python: исключение в потоке - PullRequest
0 голосов
/ 15 января 2019

Я не мог придумать лучшего названия.

Я использую Python 2.7 в кластере. Python вызывает Gurobi (пакет оптимизации) для решения ряда моделей оптимизации. В интерактивном режиме я могу сделать

Python Main-code.py

И все в порядке.

Однако я хочу использовать qsub для отправки моей работы. Поэтому я написал этот скрипт под названием job.sh

#--------------------------------------########
#!/bin/bash
#$ -cwd
#$ -q shojaie-bigmem.q
#$ -l h_vmem=4G 
#$ -l h_rt=00:10:00
#$ -pe local 2
#$ -o Output.out
#$ -e Error.err

export PATH="/home/guests/myfile/anaconda2/bin:$PATH"

python Main-code.py

И отправьте мою работу по

qsub job.sh

В моем коде Python у меня есть что-то вроде

for model in ['model1', 'model2', ..., 'modeln']:
if __name__ == '__main__':    
    p = Pool()
    p.map(Opt_model, Input)
    p.close()
    p.join()

Теперь я получаю эту странную ошибку:

Exception in thread Thread-3:
Traceback (most recent call last):
  File "/home/guests/myfile/anaconda2/lib/python2.7/threading.py", line 801, $
    self.run()
  File "/home/guests/myfile/anaconda2/lib/python2.7/threading.py", line754, $
self.__target(*self.__args, **self.__kwargs)
  File "/home/guests/myfile/anaconda2/lib/python2.7/multiprocessing/pool.py",$
task = get()
  File "exception.pxi", line 11, in gurobipy.GurobiError.__init__
TypeError: __init__() takes exactly 3 positional arguments (1 given)

Вот мой вопрос: это потому, что я что-то упустил в своем файле .sh? или это из-за того, что мне что-то не хватает в моем параллельном кодировании (я сомневаюсь, как это работает на моем ПК)? или что-нибудь еще?

Я действительно не могу понять, что происходит не так. Спасибо за ответ!

PS: когда я использую -pe local 1 (т.е. только одно ядро). Работает нормально.

...