Рейтинг:1

Как узнать, запущен ли еще пакетный процесс?

флаг lb

У меня есть форма с 5 кнопками, и каждая кнопка запускает отдельный пакет, некоторые пакетные процессы занимают несколько минут. Я хочу заблокировать кнопку, если пакетные процессы уже запущены, потому что другой администратор пользователя может получить доступ к той же форме и попытаться запустить пакет, который уже запущен в данный момент, для другого пользователя.

Как я могу узнать, какие пакетные процессы запущены? я пытаюсь использовать batch_get(); но каждый раз эта функция возвращает пустой массив.

Рейтинг:1
флаг cn

В соответствии с API, как только вы определяете пакет, вы предоставляете функцию обратного вызова, которая будет выполняться после завершения пакета, поэтому до тех пор, пока этот обратный вызов не будет вызван, пакет все еще продолжается.

Таким образом, в идеале ваше пакетное определение должно выполнять начальное действие, например, устанавливать статус БД, который вы можете запросить, и, если он заблокирован, вы запрещаете кнопку, и после выполнения вашего завершенного обратного вызова вы снова разблокируете кнопку.

Mauricio avatar
флаг lb
Спасибо @jbarrio. Сейчас я делаю это, как вы предлагаете, я использую `код \Drupal::state()->set('batch_import_'. $sourceId, serialize($result_source));` чтобы установить "бегущую" переменную, чтобы знать ее. Но этот пакет является прогрессивным пакетом, поэтому, если пользователь закрывает эту вкладку, пакет никогда не заканчивается и никогда не попадает в готовый обратный вызов.
jbarrio avatar
флаг cn
Ну, если честно, я ответил ровно на то, что вы спросили. То, что вы сейчас упоминаете, — это другое требование. Но в вашем новом сценарии, если пользователь закроет вкладку и пакет застрянет, вы можете запустить cron, чтобы удалить застрявшие пакеты из таблицы и сбросить состояние batch_import_ID, чтобы кнопка снова стала видимой.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.