Я не мог придумать лучшего названия.
Я использую 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 (т.е. только одно ядро). Работает нормально.