当前位置: 首页 > 知识库问答 >
问题:

关于task.supervisor.async_stream_nolink的示例?

慕高阳
2023-03-14
defmodule MySupervisor do
    use Supervisor

    def start_link do
        Supervisor.start_link(__MODULE__, [])
    end

    def init([]) do
        children= [
            worker(Basic, [])
        ]

        supervise(children, strategy: :one_for_one)
    end
end

defmodule Basic do
    use GenServer

    def start_link do
        GenServer.start_link(__MODULE__, [], name: __MODULE__)
    end
end


strings = ["long string", "longer string", "there are many of these"]


stream = Task.Supervisor.async_stream_nolink(MySupervisor, strings, fn text -> text |> String.codepoints |> Enum.count end)


Enum.reduce(stream, 0, fn {:ok, num}, acc -> num + acc end) |> IO.puts

但是,我搞错了:

**(退出#pid<0.70.0>)退出于:genserver.call(MySupervisor,{:start_child,[#pid<0.70.0>,:Monitor,{:nonode@nohost,#pid<0.81.0>},{:erlang,:apply,[#function<0.118488666 in file:test.exs>,[“long st ring”]]}]},:infinity)**(退出)无进程:进程不活动,或者当前没有与给定名称关联的进程,可能是因为其应用程序未启动

16:24:34.317[错误]GenServer#pid<0.79.0>正在终止**(停止)退出于:GenServer.call(MySupervisor,{:start_child,[#pid<0.70.0>,:monitor,{:nonode@nohost,#pid<0.81.0>},{:erlang,:apply,[#function<0.118488666 in file:test.exs>,[“long string”]]}]},:infinity)**(EXIT)无进程:进程不活动,或者当前没有与给定名称相关联的进程,可能是因为其应用程序未启动上一条消息:{:EXIT,#pid<0.70.0>,{:noproc,{GenServer,:call,[MySupervisor,{:start_child,[#pid<0.70.0>,:monitor,{:nonode@nohost,#pid<0.81.0>},{:erlang,:apply,[#function<0.118488666 in file:test.exs

,[“长字符串”]]}]},:Infinity]}}状态:{:state,{#pid<0.79.0>,MySupervisor},:One_for_One,[{:child,#pid<0.80.0>,Basic,{Basic,:start_link,[]},:permanent,5000,:worker,[Basic]}],:undefined,3,5,[],0,MySupervisor,[]}

有人能帮忙吗?我找不到关于使用task.supervisor.async_stream_nolink的示例

编辑

{:ok, supervisor} = MySupervisor.start_link
stream = Task.Supervisor.async_stream_nolink(supervisor, strings, fn text -> text |> String.codepoints |> Enum.count end)
Enum.reduce(stream, 0, fn {:ok, num}, acc -> num + acc end) |> IO.puts

**(EXIT from#pid<0.70.0>)出现异常:**(MatchError)右侧值不匹配:{:错误,{:EXIT,{:undef,[{Basic,:start_link,[#pid<0.70.0>,:monitor,{:nonode@nohost,#pid<0.81.0>},{:erlang,:apply,[#file:test.exs>,[“long string”]]},[#function<0.20003547 in file:test.exs>,[“long string”]]},{:supervisor,:do_start_child_i,3,[file:'supervisor.erl',行:381]},{:supervisor,:handle_call,3,[file:'supervisor.erl',行:406]},{:gen_server,:try_handle_call,4,[文件:“gen_server.erl”,行:615]},{:gen_server,:handle_msg,5,[文件:“gen_server.erl”,行:647]},{:proc_lib,:init_p_do_apply,3,[文件:“proc_lib.erl”,行:247]}]}}}(elixir)lib/task.supervisor.ex:265:task.supervisor.build_stream中的匿名FN/4(elixir)lib/task.supervisor.ex:332:task.supervisor.stream_monitor/6

17:07:53.497[error]进程#pid<0.81.0>引发异常**(MatchError)右侧值不匹配:{:错误,{:exit,{:undef,[{Basic,:start_link,[#pid<0.70.0>,:monitor,{:nonode@nohost,#pid<0.81.0>},{:erlang,:apply,[#file:test.exs>,[“long string”]]},[#function<0.20003547 in file:test.exs>,[“long string”]]},{:supervisor,:do_start_child_i,3,[file:'supervisor.erl',line:381]},{:supervisor,:handle_call,3,[file:'supervisor.erl'行:406]},{:gen_server,:try_handle_call,4,[文件:“gen_server.erl”,行:615]},{:gen_server,:handle_msg,5,[文件:“gen_server.erl”,行:647]},{:proc_lib,:init_p_do_apply,3,[文件:“proc_lib.erl”,行:247]}]}}(elixir)lib/task.supervisor.ex:265:task.supervisor.build_stream中的匿名FN/4(elixir)lib/task.supervisor.ex:332:task.supervisor.stream_monitor/6

17:07:53.503[错误]GenServer MySupervisor终止**(MatchError)右侧值不匹配:{:错误,{:exit,{:undef,[{Basic,:start_link,[#pid<0.70.0>,:monitor,{:nonode@nohost,#pid<0.81.0>},{:erlang,:apply,[#file:test.exs>,[“长字符串”]]}],[]},{:supervisor,:do_start_child_i,3,[文件:'supervisor.erl',行:381]},{:supervisor,:handle_call,3,[文件:'supervisor.erl',行:406]},{:gen_server,:try_handle_call,4,[文件:“gen_server.erl”,行:615]},{:gen_server,:handle_msg,5,[文件:“gen_server.erl”,行:647]},{:proc_lib,:init_p_do_apply,3,[文件:“proc_lib.erl”,行:247]}]}}}(elixir)lib/task.supervisor.ex:265:匿名FN/4中的task.supervisor.build_stream/5(elixir)lib/task.supervisor.ex:332:task.supervisor.stream_monitor/6最后一条消息:{:exit,#pid<0.70.0>,{{:BADMATCH,{:error,{:EXIT,{:UNDEF,[{Basic,:START_LINK,[#PID<0.70.0>,:Monitor,{:Nonode@NoHost,#PID<0.81.0>},{:Erlang,:APPLY,[#FUNCTION<0.20003547文件:test.ex S>,[“长字符串”]]}],[]},{:supervisor,:do_start_child_i,3,[文件:“supervisor.erl”,行:381]},{:supervisor,:handle_call,3,[文件:“supervisor.erl”,行:406]},{:gen_server,:try_handle_call,4,[f文件:“gen_server.erl”,行:615]},{:gen_server,:handle_msg,5,[文件:“gen_server.erl”,行:647]},{:proc_lib,:init_p_do_apply,3,[文件:“proc_lib.erl”,行:247]}]}}}},[{task.supervisor,:“-build_str eam/5-fun-0-”,4,[文件:“lib/task/supervisor.ex”,行:265]},{task.supervisor,:stream_monitor,6,[文件:“lib/task/supervisor.ex”,行:332]}]}}}状态:{:state,{:local,MySupervisor},:simple_one_for_one,[{:child,:undefined,Basic,{Basic,:start_link,[]},:permanent,5000,:worker,[Basic]},:undefined,3,5,[],0,MySupervisor,[]}

共有1个答案

胡俊美
2023-03-14

task.Supervisor中的函数只能在使用task.Supervisor.start_link/1启动的Supervisor上运行。

您可以启动一个未命名的实例并将pid传递给async_stream_nolink/4:

{:ok, supervisor} = Task.Supervisor.start_link
stream = Task.Supervisor.async_stream_nolink(supervisor, strings, fn text -> text |> String.codepoints |> Enum.count end)

或启动命名实例并传递其名称:

Task.Supervisor.start_link name: MySupervisor
stream = Task.Supervisor.async_stream_nolink(MySupervisor, strings, fn text -> text |> String.codepoints |> Enum.count end)
children = [
  supervisor(Task.Supervisor, [name: MySupervisor]),
  ...
]
Task.Supervisor.async_stream_nolink(MySupervisor, ...)
 类似资料:
  • 我正在测试

  • 本文向大家介绍关于Function中的bind()示例详解,包括了关于Function中的bind()示例详解的使用技巧和注意事项,需要的朋友参考一下 前言 bind()接受无数个参数,第一个参数是它生成的新函数的this指向,比如我传个window,不管它在何处调用,这个新函数中的this就指向window,这个新函数的参数就是bind()的第二个、第三个、第四个....第n个参数加上它原本的参

  • 例子是: 相关规则是: 将左值到右值的转换应用于表达式E时 E未进行潜在评估,或 未访问引用对象中包含的值。 我对表达式表示怀疑,它指出未使用。 根据规则: 表达式E的一组潜在结果定义如下: 如果E是一个id表达式([expr.prim.id]),则该集合只包含E。 根据项目符号3,表达式的潜在结果是本身,而确实是的一个成员,这是的潜在结果。然而,我不同意不使用odr的说法。 根据这条规则: ba

  • 问题内容: 我对线程安全性有疑问。据我所知,SimpleDateFormat不是线程安全的。我想知道如果在spring控制器中以以下方式使用它会产生什么影响: 稍后在我的控制器功能中,我将其如下使用: 然后将calcDate添加到我的模型对象中,并返回ModelAndView。 那么用这种方式我会看到什么样的问题呢?是否只需删除static关键字即可解决任何问题,因为每个线程将使用其自己的date

  • 问题内容: 关闭。 此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗? 更新问题,使其成为Stack Overflow 的主题。 4年前关闭。 任何人都可以建议一个很好的分页php脚本,其中一个人要分页显示数据库中的许多项目 问题答案: 以下链接可以帮助您,它也具有易于使用的描述 http://www.strangerstudios.com/sandbox/pagination/di

  • 在加载.obj模型时可以显示进度对话框。我试图调用RajawalivuforiaExampleRenderer.java中的ProgressDialog,但它说“Can't create handler inside thread that not calling looper.prepare()” 我在这里粘贴了部分代码: