生成进程的混合任务不执行任何操作
Mix task spawning a process does nothing
我创建了一个生成进程的混合任务。
它使用 Flow
,从流中读取并写入 consumer
.
中定义的文件
一天结束时,它只会产生一些进程。
如果我 运行 通过 iex
它工作正常,只要我离开 shell 运行ning.
但是,如果我从命令行将其作为混合任务启动,则没有任何反应,您如何让进程保持打开状态?
use Flow
def run([stream]) do
specs = [{{ProdCon,[]},[]}]
consumer = [{{Consumer,[]},[]}]
stream
|> Flow.from_enumerable()
|> Flow.through_specs(specs)
|> Flow.into_specs(consumer)
end
生成一个 Task
来完成这项工作并等待它以 Task.yield/2
:
完成
use Flow
def run([stream]) do
task = Task.async(fn ->
specs = [{{ProdCon,[]},[]}]
consumer = [{{Consumer,[]},[]}]
stream
|> Flow.from_enumerable()
|> Flow.through_specs(specs)
|> Flow.into_specs(consumer)
end)
case Task.yield(task, 3_600) do # wait 1 hour
{:ok, result} -> result
nil -> IO.puts("Failed to get a result :(")
end
end
我创建了一个生成进程的混合任务。
它使用 Flow
,从流中读取并写入 consumer
.
一天结束时,它只会产生一些进程。
如果我 运行 通过 iex
它工作正常,只要我离开 shell 运行ning.
但是,如果我从命令行将其作为混合任务启动,则没有任何反应,您如何让进程保持打开状态?
use Flow
def run([stream]) do
specs = [{{ProdCon,[]},[]}]
consumer = [{{Consumer,[]},[]}]
stream
|> Flow.from_enumerable()
|> Flow.through_specs(specs)
|> Flow.into_specs(consumer)
end
生成一个 Task
来完成这项工作并等待它以 Task.yield/2
:
use Flow
def run([stream]) do
task = Task.async(fn ->
specs = [{{ProdCon,[]},[]}]
consumer = [{{Consumer,[]},[]}]
stream
|> Flow.from_enumerable()
|> Flow.through_specs(specs)
|> Flow.into_specs(consumer)
end)
case Task.yield(task, 3_600) do # wait 1 hour
{:ok, result} -> result
nil -> IO.puts("Failed to get a result :(")
end
end