diff --git a/src/Faw/fwUtil.erl b/src/Faw/fwUtil.erl index 4b999f0..5b2f7f5 100644 --- a/src/Faw/fwUtil.erl +++ b/src/Faw/fwUtil.erl @@ -22,7 +22,7 @@ initCfg(Kvs) -> ]. initWParam(FName, IsTmp) -> - #wParam{fName = FName, fNameTid = persistent_term:get(FName), mod = FName:getV(?wMod), isTmp = IsTmp}. + #wParam{fName = FName, fNameTid = ?IIF(is_boolean(IsTmp), persistent_term:get(FName), undefined), mod = FName:getV(?wMod), isTmp = IsTmp}. tryWorkLoop(#wParam{fName = FName, fNameTid = FNameTid, mod = Mod, isTmp = IsTmp} = WParam) -> Task = eLfq:tryOut(FNameTid), diff --git a/src/Faw/fwWTP.erl b/src/Faw/fwWTP.erl index 04acf48..416a3c2 100644 --- a/src/Faw/fwWTP.erl +++ b/src/Faw/fwWTP.erl @@ -40,9 +40,9 @@ init([FName, IsTmp]) -> {ok, #state{wParam = fwUtil:initWParam(FName, IsTmp)}} end. -handleAfter(0, #state{wParam = WParam} = State) -> - NewState = fwUtil:tryWorkLoop(WParam, State), - {noreply, NewState}. +handleAfter(0, #state{wParam = WParam}) -> + fwUtil:tryWorkLoop(WParam), + kpS. handleCall({mDoWork, Work}, #state{wParam = #wParam{fName = FName, mod = Mod, isTmp = IsTmp}} = _State, FROM) -> try Mod:work(Work) of @@ -102,10 +102,12 @@ code_change(_OldVsn, State, _Extra) -> {ok, State}. work(task1) -> - task1; + io:format("IMY*****************do work ~p~n", [task1]), + dotask1; work(task2) -> - task2; + io:format("IMY***************** do work ~p~n", [task1]), + dotask2; work(_Task) -> timer:sleep(1), - % io:format("work out ~p ~p ~n",[self(), _Task]), - _Task. \ No newline at end of file + io:format("IMY***************** do work ~p ~p ~n",[self(), _Task]), + {do, _Task}. \ No newline at end of file diff --git a/src/eFaw.erl b/src/eFaw.erl index 69c6b7c..7333739 100644 --- a/src/eFaw.erl +++ b/src/eFaw.erl @@ -51,17 +51,17 @@ openW(WName, Kvs) -> }, case supervisor:start_child(eFaw_sup, FChildSpec) of {ok, _Pid} = Ret -> - NameList = [{Idx, workerName(Idx)} || Idx <- lists:seq(1, WFCnt)], + NameList = [{Idx, wWorkerName(WName, Idx)} || Idx <- lists:seq(1, WFCnt)], [supervisor:start_child(WName, [WorkName, worker]) || {_Idx, WorkName} <- NameList], - fwKvsToBeam:load(WName, [CfgKvs | NameList]), + fwKvsToBeam:load(WName, CfgKvs ++ NameList), Ret; ErrRet -> - ?FwErr("open factory error ~p~n", [ErrRet]), + ?FwErr("open worker error ~p~n", [ErrRet]), ErrRet end. -workerName(Idx) -> - binary_to_atom(<<"$fawWork_", (integer_to_binary(Idx))/binary>>). +wWorkerName(WName, Idx) -> + binary_to_atom(<<"$wWork_", (atom_to_binary(WName))/binary, (integer_to_binary(Idx))/binary>>). closeW(WName) -> supervisor:terminate_child(eFaw_sup, WName), @@ -137,7 +137,7 @@ openF(FName, Kvs) -> _ -> ignore end, - + FChildSpec = #{ id => FName, start => {fwWSup, start_link, [FName, FName:getV(?wMod)]}, @@ -157,7 +157,8 @@ openF(FName, Kvs) -> end. hireW(WorkerNum, FName, IsTmp) when is_integer(WorkerNum), WorkerNum > 0 -> - case supervisor:start_child(FName, [IsTmp]) of + FWorkerName = fWorkerName(FName, WorkerNum), + case supervisor:start_child(FName, [FWorkerName, IsTmp]) of {ok, _Pid} -> ignore; ErrRet -> @@ -167,6 +168,9 @@ hireW(WorkerNum, FName, IsTmp) when is_integer(WorkerNum), WorkerNum > 0 -> hireW(_WorkerNum, _FName, _IsTmp) -> ok. +fWorkerName(FName, Idx) -> + binary_to_atom(<<"$fWork_", (atom_to_binary(FName))/binary, (integer_to_binary(Idx))/binary>>). + closeF(FName) -> supervisor:terminate_child(eFaw_sup, FName), supervisor:delete_child(eFaw_sup, FName), @@ -183,7 +187,7 @@ inWork(FName, Work) -> FTMax = FName:getV(?fTMax), FTLfl = FName:getV(?fTLfl), WFCnt = FName:getV(?wFCnt), - + if FTaskLen > FTMax -> %% The factory is overloaded