Как узнать, сколько RFC-задач я могу создать? - PullRequest
3 голосов
/ 19 сентября 2019

Я реализую отчет, который выполняет один и тот же код дважды, параллельно.

Для этого я делаю следующее:

  call function 'my_func'
  starting new task 'T1' destination 'NONE'
  calling go_results->receive_results on end of task
    exporting
      it_pernr_tab            = lt_1st_half
      is_selection_parameters = gs_parm.

  call function 'my_func'
  starting new task 'T2' destination 'NONE'
  calling go_results->receive_results on end of task
    exporting
      it_pernr_tab            = lt_2nd_half
      is_selection_parameters = gs_parm.

  wait until go_results->mv_received_results = 2.

Это создаст две новые задачи,который будет выполняться очень хорошо.

Но я вообще не делаю никаких проверок, я просто вызываю задачу дважды, потому что я решил это сделать.

Я не знаю, достаточно ли "места" для двух новых задач, и есть ли место для 10, и я мог бы использовать их лучше.

И это как раз мой вопрос:

а) Можно ли как-то рассчитать максимальное количество задач, которые я могу создать, чтобы я использовал парализм в полной мере?например, получить количество доступных рабочих процессов?

Ответы [ 2 ]

2 голосов
/ 20 сентября 2019

Перед запуском ваших функциональных модулей asnyc вам следует вызвать функциональный модуль SPBT_INITIALIZE.

Релевантными являются параметры group_name, max_pbt_wps и free_pbt_wps

CALL FUNCTION 'SPBT_INITIALIZE'
  EXPORTING
    group_name                     = 'YOUR_SERVER_GROUP'
  IMPORTING
    MAX_PBT_WPS                    = lv_max
    free_pbt_wps                   = lv_free
  EXCEPTIONS
    invalid_group_name             = 1
    internal_error                 = 2
    pbt_env_already_initialized    = 3
    currently_no_resources_avail   = 4
    no_pbt_resources_found         = 5
    cant_init_different_pbt_groups = 6
    OTHERS                         = 7.

Группы серверов используются, чтобы избежать использования кем-либобудет использовать все доступные процессы в системе SAP.Если вы не хотите настраивать группы серверов, вы будете использовать группу серверов DEFAULT.Кроме того, вы должны запустить свои асинхронные функциональные модули с именем вашей группы серверов

CALL FUNCTION 'YOUR_ASYNC_FUNCTION' STARTING NEW TASK 'YOUR_TASK_IDENTIFIER'
  DESTINATION IN GROUP 'YOUR_SERVER_GROUP'

или, если вы хотите использовать группу по умолчанию

CALL FUNCTION 'YOUR_ASYNC_FUNCTION' STARTING NEW TASK 'YOUR_TASK_IDENTIFIER'
  DESTINATION IN GROUP DEFAULT

Здесь вы найдете документацию SAPдля групп серверов

https://help.sap.com/doc/saphelp_nw70/7.0.31/en-US/fa/096e92543b11d1898e0000e8322d00/content.htm?no_cache=true

Но в любом случае после вашего звонка SPBT_INITIALIZE вы получите запрошенную информацию.

lv_max: максимально доступные процессыдля вашей группы серверов

lv_free: доступные процессы на данный момент для вашей группы серверов

0 голосов
/ 19 сентября 2019

Этот вопрос уже обсуждался, и, пожалуйста, найдите ссылку на эту тему.

Параллельная обработка с началом новой задачи - тайм-аут экрана интерфейса .

Справочный документ SAP включен Параллельная обработка

SPBT_INITIALIZE - это FM, который вы ищете.

...