gpt4 book ai didi

d - 从 vibe.d 同步执行 std.process 有时会静默地挂起服务器

转载 作者:行者123 更新时间:2023-12-04 09:28:13 24 4
gpt4 key购买 nike

我写了一个 vibe.d clang-format 的网络用户界面,当出现 this input 时使用 LLVM 风格时,服务器挂起。

处理POST的代码:

void post(string style, string code)
{
import std.algorithm;
import std.file;
import std.conv;
import std.process;
auto pipes = pipeProcess(["clang-format", "-style="~style], Redirect.stdout | Redirect.stdin);
scope(exit) wait(pipes.pid);

pipes.stdin.write(code);
pipes.stdin.close;
pipes.pid.wait;

code = pipes.stdout.byLine.joiner.to!string;

string selectedStyle = style;

render!("index.dt", styles, code, selectedStyle);
}

这可能不应该以阻塞方式完成,但我不知道如何异步执行。我尝试将函数的内容包装在 runTask 中,但我想不出正确调用它的方法。

我怎样才能使它可靠?

最佳答案

您可能向程序的 stdin 写入了太多数据没有阅读它的 stdout .由于管道缓冲区大小有限,这会导致执行的程序在写入其 stdout 时阻塞。 ,这反过来会导致您的程序在写入其 stdin 时阻塞.

解决方案是在写入数据时读取数据。一个简单的方法是创建第二个线程来读取数据,而主线程则写入数据。

关于d - 从 vibe.d 同步执行 std.process 有时会静默地挂起服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30841150/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com