Posted: Thu Mar 13, 2008 12:18 am Post subject: Параллельное программирование в ABAP.
Прошу помощи вот в каком вопросе:
Передо мной стоит задача выгрузки борльшого массива данных, большую часть которого занимают расчеты и сбор по базе этих данных... хотелось бы ускорить весь процесс и одновременно обойти ограничение в размере самого процесса на сервере в 2ГБ...
Встает вопрос о распараллеливании обработки...
Подскажите Как в ABAP реализована парраллельность?
Изучая этот вопрос, я пришел к выводу, что есть одна возможность -
это написать report который затем можно запустить в фоне из диалогового report`a. Использование событий ... и тд...
Возможно данная задача как-то решена в SAP`е стандартно?
пример если не трудно... или ссылку на то в каком направлении "рыть" _________________ (SAP) Система нипель... выпускает лучше, чем впускает!
Age: 160 Joined: 04 Oct 2007 Posts: 1218 Location: Санкт-Петербург
Posted: Thu Mar 13, 2008 9:53 am Post subject:
Для паралельной обработки можно использовать асинхронный вызов функции, открывающий новую сессию
CALL FUNCTION func ...STARTING NEW TASK task name.
Для синхронизации просессов в разных сессиях, можно эмулировать работу мулексов через переменные в SAP MEMORY (EXPORT/ IMPORT FROM/ TO MEMORY) или же опцию:
CALL FUNCTION func ...STARTING NEW TASK task name
PERFORMING form ON END OF TASK
Age: 160 Joined: 04 Oct 2007 Posts: 1218 Location: Санкт-Петербург
Posted: Thu Mar 20, 2008 2:16 pm Post subject: Re: Паралл. программирование
Crystal_Ra wrote:
Тогда такой вопрос?
Обычно в продуктивной системе имеется несколько кластаров.
При запуске функ. модуля в форме
CALL FUNCTION func ...STARTING NEW TASK task name.
Как точно указать на каком сервере запустить эту задачу?
Или система без указания сама оптимально выберет сервер под задачу?
Если не выберет то как определить менее загруженный сервер?
При использовании в системе нескольких серверов приложений, наименее загруженный выбирается при вашем логине в систему.
Далее ваша программа выполняется на одном сервере.
Если Вы используете конструкцию
CALL FUNCTION func ...STARTING NEW TASK task name.
новая задача будет выполняться на том же сервере приложений, только в новой сессии. Соотвественно новая сессия будет получать от процессора свои кванты времени на выполнение программы. Этим вы можете увеличить вычислительные ресурсы процессора под вашу задачу.
Если Вы хотите запустить выполнение ФМ на другом сервере приложений, используется конструкция
CALL FUNCTION func DESTINATION dest.
Как выбирать менее загруженный сервер, это я сейчас не готов ответить. Надо поискать ФМ.
Age: 48 Joined: 25 Jan 2008 Posts: 580 Location: Москва
Posted: Thu Mar 20, 2008 2:17 pm Post subject:
Для свободных серверов и рабочих процессов можно использовать группу функций SPBT:
Определение количества свободных процессов
ФМ SPBT_INITIALIZE - при первом запуске
ФМ SPBT_GET_CURR_RESOURCE_INFO - при остальных запусках
Определение сервера для параллельной обработки:
ФМ SPBT_PARALLEL_PROCESSING _________________ С уважением,
Удав.
Запуская процесс по именя язнаю его имя... вроде и все..
SM50 - дает список но имен вроде нету...
мне нужно видеть что процесс еще работает или нет...
------------------------------------------
и еще вопрос...
вызываю
CALL FUNCTION 'ABAP4_CALL_TRANSACTION' STARTING NEW TASK 'TEST'
создается фоновый процесс? или процесс равный диалоговому?
Я что-то запутался... _________________ (SAP) Система нипель... выпускает лучше, чем впускает!
Age: 160 Joined: 04 Oct 2007 Posts: 1218 Location: Санкт-Петербург
Posted: Sat Mar 22, 2008 8:26 pm Post subject:
Crystal_Ra wrote:
Запуская процесс по именя язнаю его имя... вроде и все..
SM50 - дает список но имен вроде нету...
мне нужно видеть что процесс еще работает или нет...
------------------------------------------
и еще вопрос...
вызываю
CALL FUNCTION 'ABAP4_CALL_TRANSACTION' STARTING NEW TASK 'TEST'
создается фоновый процесс? или процесс равный диалоговому?
Я что-то запутался...
1) Чтобы убедиться, что новая сессия с ФМ стартовала, можете для проверки в код вставить бесконечный цикл:
DATA: v.
WHILE v IS INITIAL.
ENDWHILE.
Тогда точно увидите в sm50, запущен он или нет.
CALL FUNCTION func ...STARTING NEW TASK
Effect
Starts the function module func asynchronously in a new mode. In contrast to normal function module calls, the calling program resumes processing as soon as the function module is started in the target system. It does not wait until the function module has finished. Through CALL SCREEN , the called function module can, for example, display a
screen and thus interact with the user.
Запущенный в новой сессии ФМ имеет связь с SAP GUI на сервере презентаций. То есть вы можете использовать ФМ, например GUI_DOWNLOAD, требующий связи с gui. Разница в том, что новая сессия будет создавать новый диалоговый процесс и новое окно.
Не имеют связи с sap gui задачи, запущенные в фоне,
например: CALL FUNCTION ... IN BACKGROUND TASK DESTINATION.
Уважаемый, vga!
Подскажите, пожалуйста.
Вот запустился ФМ в фоне... появилось окошко GUI "пустое" (сессия без имени в SM04, TH_LONG_USR_INFO).
Информация в тайтле окна такая (можно увидеть, если правый клик на SAPLogon в трее либо через закрытие режимов): 0(6), , ()
Какую информацию несут значения, и можно ли (я так понимаю, что можно) передавать туда имена (названия ФМ), чтобы можно было различать что запущено (в случае запуска разных ФМ в фоне)
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum You cannot attach files in this forum You can download files in this forum
All product names are trademarks of their respective companies. SAPNET.RU websites are in no way affiliated with SAP AG. SAP, SAP R/3, R/3 software, mySAP, ABAP, BAPI, xApps, SAP NetWeaver and any other are registered trademarks of SAP AG. Every effort is made to ensure content integrity. Use information on this site at your own risk.