Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 21, 2014 15:43:55

Jacobian
Зарегистрирован: 2014-10-21
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Django + Fortran. Как заставить их взаимодействовать?

Приветствую, господа! Моя проблема заключается в следующем. Есть крошечный файл на фортране:

!test.f90
subroutine test()
    open(1,name='data.txt',status='replace')
    write(1,*) "Привет, Django! Я Фортран!"
    close(1)
end subroutine test

Я его компилирую с помощью `f2py` вот таким образом
$ f2py -m test -c test.f90

На выходе получаю модуль, который должен по свободно импортироваться в питоне. И отчасти это происходит. Если я иду в консольку и делаю это:
$ python
>>> import test # импортируем наш фортрановский модуль
>>> test.test() 

В этом случае все работает, как и ожидается. Захожу в файлик `data.txt` и, действительно, вижу, что функция test записала туда то, что и ожидалось. Но вот в Django подобного эффекта не удается достичь. Сейчас у меня там простейший код во вьюшке, который выглядит примерно так:

... импортируются служебные библиотеки
from test import * # пытаемся импортировать наш фортрановский модуль
def index(request):
  test() # вызываем для теста нашу функцию
  ... дальше другой служебный код
Так вот. Модуль Джанго импортирует и даже не ругается на вызов функции test(), но самое главное, что хотя функция и вызывается (якобы?), она ничего не делает, то есть не записывает в файлик data.txt. Подскажите, пожалуйста, что с этим можно сделать.

Отредактировано Jacobian (Окт. 21, 2014 15:44:51)

Офлайн

#2 Окт. 21, 2014 16:05:30

Jacobian
Зарегистрирован: 2014-10-21
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Django + Fortran. Как заставить их взаимодействовать?

Все получилось! Работает как часы. Проблема была в расположении текстового файла. В Django нужно было его положить в корень проекта и тогда все заработало. Гуд.

Офлайн

#3 Окт. 21, 2014 22:56:16

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Django + Fortran. Как заставить их взаимодействовать?

:) Пара замечаний не по делу.
Городить код на фортране для веба на сегодняшний день странно. Язык мало поддерживается и постепенно загинается.
Конструкция

open(1,name='data.txt',status='replace')
    write(1,*) "Привет, Django! Я Фортран!"
    close(1)
для веба мало пригодна конструкция с явным указанием файла клиентов много и они стучатся на сайт асинхронно.



Офлайн

#4 Окт. 22, 2014 07:46:50

Jacobian
Зарегистрирован: 2014-10-21
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Django + Fortran. Как заставить их взаимодействовать?

doza_and
Язык мало поддерживается и постепенно загинается
ИМХО язык не загнется еще ближайшие несколько десятилетий (а то и больше). Не забывайте о lapack, который написан на фортране, и который входит в ядро матлаба, ну и, наконец, не забывайте о наших ядерных центрах, которые тоже ни хило используют “бородатый” фортран. Понятие “legacy code” еще никто не отменял, так что фортрану скорее всего суждено пережить нас с вами. Ну а что касается моего примера с файликом, то он был просто учебный и я хотел для себя разобраться 1) как можно интегрировать питон с фортраном 2) как сделать что-то интересное не просто в консольке, но может и в виде приложения.

Отредактировано Jacobian (Окт. 22, 2014 07:47:57)

Офлайн

#5 Окт. 22, 2014 09:03:44

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Django + Fortran. Как заставить их взаимодействовать?

Jacobian
загнется еще ближайшие несколько десятилетий
А может и никогда. Просто будет мало людей его использовать.
Jacobian
Не забывайте о lapack
Давно уже есть clapack,plapack и т.п. (почти от рождения lapack) Никаких проблем нет. Причем использовать библиотеки (которые вообще все равно на чем написаны) и писать свой код это совсем разные вещи. Вы разработчик lapack?

Jacobian
и который входит в ядро матлаба
Я не большой специалист по архитектуре матлаба но если посмотреть wiki то найдем:
https://ru.wikipedia.org/wiki/MATLAB
“переписали MATLAB на C и основали в 1984 компанию The MathWorks для дальнейшего развития…”


Jacobian
не забывайте о наших ядерных центрах,
Я сам как раз из “ядерных центров”. Все конечно очень консервативно, но больших новых проектов на фортране никто не начинает. Как раз происходит уход от фортрана. Посмотрите http://geant4.cern.ch/ Он уже изрядно и очень быстро потеснил MCNP. Сам MCNP обрастает со всех сторон питоном. И так везде. Язык FORTRAN морально устарел. Ну это конечно мое личное мнение.

Правильный выбор набора инструментов в проекте очень важен. Не ошибитесь.



Офлайн

#6 Окт. 22, 2014 09:48:27

Jacobian
Зарегистрирован: 2014-10-21
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Django + Fortran. Как заставить их взаимодействовать?

Спасибо за интересную дискуссию! Что касается матлаба, то я основывал свои рассуждения на университетских лекциях. Помнится, что хотя матлаб и переписан на С, все равно использует именно фортрановскую библиотеку. Хотя я могу ошибаться. И кстати говоря питоновская библиотека numpy тоже использует lapack (но после разговора с Вами, я что-то уже не уверен опять же - фортрановскую или не фортрановскую реализацию). Что касается моего сугубого интереса в вопросах интеграции питона, фортрана и джанго, то он исключительно учебный. В ином случае я бы конечно ограничился каким-то одним инструментом, тем же питоном или Си. Но захотелось просто поэксперементировать и оказалось, что эксперимент, как и ожидалось, вполне осуществимый. Получится небольшое приложение-аля-франкенштейн из кусочков “бородатого” фортрана и популярного ныне питона. Ну и кроме всего прочего хотелось попрактиковаться в различных вариантах распараллеливания фортрана.

Офлайн

#7 Окт. 25, 2014 16:01:52

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Django + Fortran. Как заставить их взаимодействовать?

Вы можете скачать и посмотреть исходники numpy scipy. Кое где там есть фортрановский код. Но это не показатель, также как и то что matlab или Wolfram математика написаны не на фортране. Ваш проект может потребовать совершенно других подходов. Кстати современный фортран может почти все тоже что и c++. Просто сейчас практически нельзя найти человека который владеет всей этой премудростью, тем более собрать команду разработчиков с такими умениями.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version