Я пытаюсь выполнить процедуру на языке Fortran в Python 2.7, используя параллельный Python (пакет PP). Но когда я выполняю его, используя pp.server (). Submit (...), ничего не происходит. Возможно, я реализовал это неправильно, я использовал numpy.f2py.compile()
, как объяснено здесь . Может кто-нибудь сказать мне, если это правильно? А если нет, что мне поменять?
Просто упомянуть, что код почти наверняка правильный, учитывая, что он взят из докторской диссертации ( код , бумага ).
Подпрограмма, реализованная в модуле python 2.7 под названием "design_operation":
import numpy.f2py
fsource = '''
subroutine matrix_op(grid_x,grid_t,eval_grid,pas,K,L,M,C)
COMPLEX :: i=(0.0,1.0)
INTEGER , intent(in) :: K,L,M
REAL , intent(in) :: pas
INTEGER :: u,v,w
REAL , dimension(1:M) , intent(in) :: grid_x
REAL , dimension(1:K) , intent(in) :: grid_t
REAL , dimension(1:L) , intent(in) :: eval_grid
COMPLEX, dimension(1:L,1:M) , intent(out) :: C
do u=1,L
do v=1,M
do w=1,K
C(u,v) = C(u,v) - i*pas*grid_t(w)*grid_x(v)*exp(-i*grid_t(w)*grid_x(v)*eval_grid(u))
end do
end do
end do
end subroutine matrix_op
'''
numpy.f2py.compile(fsource, modulename='design_operation', verbose=0)
Тогда я называю это так:
job_server.submit(func=list_append,
args=(grid_x, grid_t, sub_eval[k,:], pas_f,),
modules=('numpy as np','design_operation as fdp',)
который фактически находится в цикле и должен быть выполнен в:
job_server = pp.Server()
thread_number = job_server.get_ncpus()
...some unimportant code ...
jobs = []
for k in range(thread_number):
jobs.append(job_server.submit(func=list_append,
args=(grid_x, grid_t, sub_eval[k,:], pas_f,),
modules=('numpy as np','design_operation as fdp',)))
for i,job in enumerate(jobs):
if i == 0:
dM = job()
else:
dM = np.concatenate((dM, job()))
job_server.destroy()
return dM
Я всегда получаю следующую ошибку: массивы нулевого измерения не могут быть объединены.
Поэтому я предполагаю, что ошибка происходит из-за неправильного выполнения задач, но, возможно, я ошибаюсь.
Ошибка стека:
An error has occured during the function execution
Traceback (most recent call last):
File "C:\ProgramData\Anaconda3\envs\project\lib\site-packages\ppworker.py", line 90, in run
__result = __f(*__args)
File "<string>", line 2, in list_append
AttributeError: 'module' object has no attribute 'matrix_op'
An error has occured during the function execution
Traceback (most recent call last):
File "C:\ProgramData\Anaconda3\envs\project\lib\site-packages\ppworker.py", line 90, in run
__result = __f(*__args)
File "<string>", line 2, in list_append
AttributeError: 'module' object has no attribute 'matrix_op'
Traceback (most recent call last):
File "<ipython-input-89-6cb5b50fd813>", line 5, in <module>
dM = np.concatenate((dM, job()))#
ValueError: zero-dimensional arrays cannot be concatenated
PS: я предположил, что есть некоторый ненужный код, и поэтому я не включил его для большей ясности + аргументы func = list_append верны.