3

現時点では、以下を使用してプロセスを個別に作成および登録しています。

register(name, spawn(fun() -> myfun())).

次のような名前の N 個の登録済み Pid のリストを作成したいと思います。

pid1
pid2
pid3
.
.
.
pidN

誰でもこれを行う方法を推奨できますか?

4

2 に答える 2

8

同じ関数に対して複数のプロセスを生成したい場合は、リスト内包表記を使用して、文字列との連結を使用できますlist_to_atom/1

[register(list_to_atom("pid" ++ integer_to_list(X)), spawn(fun() -> myFun() end)) || X <- lists:seq(1,10)].
于 2012-08-02T14:28:09.090 に答える
1

以下を使用できます。

複数のプロセスで同じ関数を実行し、各プロセスを異なる名前で登録する場合:

lists:foreach( 
   fun( Name ) -> 
      register( Name, spawn( fun() -> myfun() end ) ) 
   end, 
   [ pid1, pid2, pid3 ] ).

または、異なるプロセスで異なる機能を実行する場合:

lists:foreach( 
   fun( { Name, Func } ) -> 
      register( Name, spawn( fun() -> Func() end ) ) 
   end, 
   [ { pid1, f1 }, { pid2, f2 }, { pid3, f3 } ] ).

( f1、f2、f3 - は関数です)

最後に、N 個のプロセスで同じ関数を実行する場合は、次のようにします。

N = 20, %number of processes
lists:map( 
   fun( Num ) -> 
      register( 
         list_to_atom( "pid" ++ integer_to_list( Num ) ), 
         spawn( fun() -> myfun() end ) ) 
   end, 
   lists:seq( 1, N ) ).
于 2012-08-02T14:22:04.893 に答える