我有2位演员,一位导演和一位儿童演员。
主管:
class DemoActorSupervisor(implicit val system: ActorSystem, config: Config) extends Actor {
val childActor: ActorRef = context.actorOf(FromConfig.props(Props[DemoActorChild]), "DemoChildActor")
context.watch(childActor)
override def receive: Receive = {
case s: String =>
childActor forward s
}
}
儿童演员:
class DemoActorChild extends Actor {
def receive: Receive = {
case s: String =>
Thread.sleep(100)
Future.successful(true) pipeTo (sender)
}
}
主要方法:
object ABC extends App {
implicit val system: ActorSystem = ActorSystem("Demo")
implicit val config: Config = ConfigFactory.load()
implicit val timeout: Timeout = Timeout(5, TimeUnit.MILLISECONDS)
val supervisor = system.actorOf(DemoActorSupervisor.props(), "DemoSupervisor")
val x: Future[Boolean] = (supervisor ? ("ASK")).mapTo[Boolean]
x.foreach(println)
}
我已将询问超时设置为5毫秒,然后对主管演员进行询问。正在将消息转发给子演员。在逻辑上放置Thread.sleep(100)
的儿童演员中,我应该将Ask Timeout例外设置为5毫秒,并且孩子需要100毫秒以上的时间来回复,但我没有得到Ask超时例外。
有人可以告诉我代码有什么问题吗?如何获得询问超时异常。
答案 0 :(得分:2)
您可以在Excel: Open Spreadsheet "C:\Users\my_user\Documents\xyz.xlsx".ActiveSheet:"Default".Contains Header,Session:Default
的说明中看到:
一旦值可用,便会在将来异步处理该值。
警告:如果此未来从未完成或因失败而结束,则不会调用。
如果您想使用Future.foreach
,则应编写如下内容:
Future.foreach
答案 1 :(得分:1)
再试一次:
import torch
from torchvision.transforms import *
from torchvision.datasets import MNIST
from torch.utils.data import DataLoader
transform_train = Compose([Resize(28, interpolation=2),
RandomHorizontalFlip(p=0.5),
ToTensor(),
Normalize([0.], [1.])])
trainset = MNIST(root='./data', train=True, download=True,
transform=transform_train)
trainloader = DataLoader(trainset, batch_size=32, shuffle=True, num_workers=2)
print(trainset[0][0].size(), trainset[0][0].min(), trainset[0][0].max())
(torch.Size([1, 28, 28]), tensor(0.), tensor(1.))
仅处理成功案例,x.onComplete {
case Success(v) =>
println(v)
case Failure(v) =>
println(v)
}
属于Future foreach
,您需要通过代码来处理它。
或者接下来也可以:
akka.pattern.AskTimeoutException: