我想使用f2py生成行为类似于python类的对象:它应该存储一段数据,这样数据只需传递一次。我最终希望拥有如下所示的python代码,其中myfortranmodule是使用f2py编译的模块。

from myfortranmodule import Analyzer

analyzer = Analyzer(bigvector)
for parameter in [0.0, 8.3, 10.2, ...]:
    answer = analyzer.get_answer(parameter)


具体来说,我需要以这种方式进行结构化,因为bigvector是非常大的数据,只应传递一次,fo​​r循环中的参数列表很长(并且不能提前传递,因为它是在python中即时生成的),而get_answer方法的计算量很大,因此应在fortran中完成。

是否可以使用f2py构建此类类对象,或者将数据存储在fortran子例程中?

最佳答案

这只是为了确认使用通用块会满足您的需求。我实际上是从相反的角度偶然发现的。我想要一个干净的方法调用时就获得了数据持久性!
由于Fortran例程很长,因此通过从此处开始调用调用Fortran模块然后每次我想运行它时均multiprocessing.process来解决该问题。这比重写Fortran删除公共块要简单得多。

q = mp.Queue()
cargs = (arg1, arg2, arg3)
p = mp.Process(target=module, args=(q, cargs))
p.start()
p.join()
result = q.get()

关于python - 我可以用f2py创建一个类吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27946075/

10-11 15:50