我目前正在尝试将现有的无类型演员重写为有类型的演员。由于参与者正在使用 ScalikeJDBC 与 MySQL 数据库进行对话,并且由于我希望异步完成,因此我正在处理来自单独(非参与者)存储库类的 Futures。
使用无类型 Akka,在演员的接收方法中,我可以这样做:
import akka.pattern.pipe
val horseList : Future[Seq[Horse]] = horseRepository.listHorses(...)
horseList pipeTo sender()
Run Code Online (Sandbox Code Playgroud)
发送者 actor 最终会收到一个马匹列表。我无法弄清楚如何在行为中执行此操作,例如:
val behaviour : Behavior[ListHorses] = Behaviors.receive {
(ctx,msg) => msg match {
case ListHorses(replyTo) =>
val horseListF : Future[Seq[Horse]] = horseRepository.listHorses(...)
// -> how do I make horseListF's content end up at replyTo? <-
Behaviors.same
}
}
Run Code Online (Sandbox Code Playgroud)
管道模式不起作用(因为它需要一个无类型的 ActorRef),到目前为止我还没有在akka-actor-typed(2.5.12) 依赖项中找到任何其他东西,我正在使用它来完成这项工作。
我该怎么做呢?
我正在尝试(可逆地)在 Raspbian Jessie 安装内核版本 4.4.16-v7+ 上禁用 USB HID 支持。我们需要将 Raspberry Pi 放在半公共空间并在电视上显示内容,我们希望至少让它有点难以弄乱它。
到目前为止,我已经设法通过 rmmod 使 usbhid 模块从内核中移除。在对模块进行 rmmod'ing 之后,似乎每次我插入 USB 键盘或鼠标时,设备驱动程序都会重新加载到内核中。
有什么办法可以防止吗?
我需要快速连续地调用许多短期(偶尔也有一些长期存在)的外部进程,stdout并stderr实时处理。我已经找到了许多解决方案,StdoutPipe并将StderrPipe其bufio.Scanner打包到 goroutines 中。这在大多数情况下都有效,但它偶尔会吞下外部命令的输出,我不知道为什么。
这是在 MacOS X (Mojave) 和 Linux 上显示该行为的最小示例:
package main
import (
"bufio"
"log"
"os/exec"
"sync"
)
func main() {
for i := 0; i < 50000; i++ {
log.Println("Loop")
var wg sync.WaitGroup
cmd := exec.Command("echo", "1")
stdout, err := cmd.StdoutPipe()
if err != nil {
panic(err)
}
cmd.Start()
stdoutScanner := bufio.NewScanner(stdout)
stdoutScanner.Split(bufio.ScanLines)
wg.Add(1)
go func() {
for stdoutScanner.Scan() {
line := stdoutScanner.Text()
log.Printf("[stdout] %s\n", line)
}
wg.Done() …Run Code Online (Sandbox Code Playgroud)