@echo on
@setlocal
@set "prompt=--$G "
set "CREATE_OR_DELETE=CREATE"
for %%A in (:test1 :test2) do call %%A
goto :eof
:test1
rem *** Test 1 ***
if %CREATE_OR_DELETE%==DELETE goto :label
set "var=1"
if %var%==%CREATE_OR_DELETE% echo OK
set "var="
:label
goto :eof
:test2
rem *** Test 2 ***
if %CREATE_OR_DELETE%==DELETE (
set "var=1"
if %var%==%CREATE_OR_DELETE% echo OK
set "var="
)
goto :eof
Этот пример может показать вашу распознанную проблему.
Метка :test1
использует идею goto :label
, чтобы избежать кода между (
и )
, который анализируется сразу. Преимущество заключается в том, что каждая команда анализируется отдельно, поэтому вы можете легче обнаружить ошибку. Это также может избежать проблем с переменным расширением, когда может потребоваться включение отложенного расширения.
Метка :test2
использует код между (
и )
. Это вызывает ошибку при разборе, поскольку %var%
не определено из-за того, что отложенное расширение не включено. Описание ошибки может быть бессмысленным в зависимости от используемого кода.
Подводя итог, можно сказать, что наличие большого количества команд между (
и )
может быть эффективным, хотя и может затрудняться отладкой.
Вот ваш код с некоторыми изменениями, которые могут помочь.
@echo off
net session 1>nul 2>nul || goto :eof
:begin
set "CREATE_OR_DELETE=CREATE"
set "TASKNAME=TASK"
set "SCHEDULE=ONSTART"
set "TASKRUN=cmd.exe"
set ALLARGS=%*
if not defined ALLARGS (
goto getinfo
) else (
goto parsetags
)
:getinfo
choice /c CD /n /m "Are you (c)reating or (d)eleting?"
:: "obsolete as already set" if errorlevel 1 set CREATE_OR_DELETE=CREATE
if errorlevel 2 set "CREATE_OR_DELETE=DELETE"
cls
set /p "TASKNAME=What is the name of the task you're creating/deleting :: "
cls
if "%CREATE_OR_DELETE%" == "DELETE" goto :skip_create
::the code crashes on the above if statement
::that is why I'm dumbfounded
:skip_create
ALLARGS
проверено, если определено, а не обрабатывает %*
напрямую, что может быть рискованно. :eof
, так как ее не нужно вставлять. goto
знает, что это представляет конец файла. errorlevel 1
проверить после того, как choice
прокомментировано, поскольку оно уже назначено. goto :skip_create
добавлено, чтобы избежать создания кода между (
и )
. Я не знаю, существует ли это модули, реализованные уже, но что я могу сказать, баланс загрузки переоценен. То, что я могу обсудить, случайное размещение заданий является лучшим выбором, если Вы не знаете намного большей информации, как загрузка произойдет в будущее, и в большинстве случаев Вы действительно не делает. Что Вы записали:
Когда клиент соединяется, все узлы исследованы для наблюдения, который имеет наименьшее количество загрузки и затем IP наименьшего - загруженный сервер передается назад клиенту.
Как Вы знаете, что все они наименее загруженный узел не будут самыми высокими загруженный только в следующем мс? То, как Вы знаете, что все те высокие загруженные узлы, которые Вы не будете включать в список разве, отбрасывают, не загрузится только в следующем мс? Вы действительно не можете знать это, если у Вас нет очень редкого случая.
Просто мера (или вычисляют) производительность Вашего узла и установила вероятность узла быть выбранной, зависят его. Выберите узел случайным образом независимо от текущей загрузки. Используйте это в качестве начального подхода. При установке его затем можно попробовать, составляют некоторый более сложный алгоритм. Я держал пари, что это будет очень тяжелая работа для избиения этого начального подхода. Доверяйте мне, очень трудно.
Править: Чтобы быть более ясным в одних тонких деталях, я сильно утверждаю, что Вы не можете предсказать будущую загрузку из текущей и исторической загрузки, но необходимо использовать знание о вероятности продолжительностей задач и текущем разложении времени жизни задачи. Эту работу настолько трудно попробовать, достигают.
Цель дерева контроля состоит в том, чтобы справиться, процессы не обязательно передают запросы. Нет никакой причины, Вы не могли использовать другой код для отправления запросов непосредственно членам списка доступных процессов. Посмотрите pool:get_nodes или pool:get_node () функции для одного способа получить те списки.
Можно позволить модулю пула обработать управление процессами (перезапуск, контроль и уничтожение обработки) и использовать некоторый другой модуль для прозрачного перенаправления запросов к пулу процессов. Возможно, Вы искали распределенные пулы хотя? Будет трудно убежать от основного процесса в erlang, не идя в распределенные узлы. Целая рабочая система является в значительной степени одним большим деревом контроля.
Я недавно помнил pg модуль, который позволяет Вам устанавливать группы процесса. сообщения, отправленные группе, переходят к каждому процессу в группе. Это могло бы получить Вас часть путь к тому, что Вы хотите. необходимо было бы написать код для решения, какой процесс обрабатывает запрос для реального, но Вы получили бы пул без ведущего устройства, использующего его.