在我目前的项目中,我正在处理大量数据,并且数据处理应该是内存效率和计算性能.每个项目都有一些可以非常快速地读取的元数据,并且几乎总是很有趣.除此之外,每个项目都具有相对较少读取的实际数据,但阅读尤其是解析非常耗时.因此,它自然接缝,只有在实际请求的情况下才能解析数据.
为此我想到了懒惰的价值观:
class Item(metaData: MetaData, dataString: String) {
lazy val data = parse(dataString)
}
Run Code Online (Sandbox Code Playgroud)
现在,仅在实际请求时才解析数据.问题是,dataString和解析后的数据保存在内存中.据我所知,只要"数据"被调用(或者存在?)就不能再访问"dataString"了,因此它可以被垃圾收集.不幸的是,这种接缝不会发生.
有没有办法以不同的方式解决问题或给垃圾收集器提示垃圾收集dataString在这里?
我想使用 Keras 进行实时训练和预测设置。在我的场景中,我通过 MQTT 获取实时数据,这些数据应该用于训练 (LSTM) 神经网络和/或将它们应用于获得预测。
我使用的是具有 GPU 支持和相当强大的 GPU 容量的 Tensorflow 后端,但在我的场景中,Keras 并没有真正从 GPU 加速中获益。(我使用 keras 存储库中的示例进行了一些性能测试,以确保 GPU 加速正常工作)。在我的第一种方法中,我使用该model.train_on_batch(...)方法来训练网络,其中每个项目都来自 MQTT:
model = load_model()
def on_message(msg):
"""
Method called by MQTT client each time new data comes in
"""
if msg.topic == 'my/topic':
X, Y = prepare_data(msg.payload)
prediction = model.predict(X)
loss = model.train_on_batch(X, Y)
send_to_visualization_tool(prediction, loss)
Run Code Online (Sandbox Code Playgroud)
此设置中的一个训练步骤大约需要 200 毫秒。然而,当我引入缓冲区(例如缓冲 100 个数据点)时,整个批次的训练时间仅略有增加。这表明批量训练的设置时间有巨大的开销。我还注意到,当使用 size 1 批次时,CPU 消耗相当高,而 GPU 几乎没有使用。
作为替代方案,我现在引入了一个同步队列,每当数据传入时,MQTT 客户端就会推送数据,然后神经网络将处理上一批数据时传入的所有数据作为一个批次进行消费:
train_data_queue = Queue.Queue()
# MQTT client running in …Run Code Online (Sandbox Code Playgroud) 我有问题将对象附加到scala.collection.mutable.ListBuffer.我熟悉相应的API,并且知道通常使用+ =或++ =方法添加对象或对象序列.
我正在实施一个网络支持的纸牌游戏,并且有一个简单的问题,即将一些选择的卡添加到手牌列表中.在下面的代码中,我将获得对手册列表(ListBuffer)的引用,打印ListBuffer的大小,将选定的卡添加到其中并再次打印大小.
// get the references and ensure that it are rally ListBuffers / Lists
val handCards: mutable.ListBuffer[ClientCard] = playerPanel.player.handCards
val chosenCards: List[ClientCard] = _chosenCards
// print the number of elements per list
println("number of hand cards: " + handCards.size)
println("number of chosen cards: " + chosenCards.size)
// append the chosen cards to the hand cards
println("append operation: " + handCards + " ++= " + chosenCards)
handCards ++= chosenCards
// print …Run Code Online (Sandbox Code Playgroud) 我想在Play应用程序之外创建一个Play Web服务客户端.对于Play WS版本2.4.x,很容易发现它是这样完成的:
val config = new NingAsyncHttpClientConfigBuilder().build()
val builder = new AsyncHttpClientConfig.Builder(config)
val client = new NingWSClient(builder.build)
Run Code Online (Sandbox Code Playgroud)
但是在2.5.x中,NingWSClient现在已经弃用了 - 而AhcWSClient应该使用它.
不幸的是,我没有找到一个完整的例子来解释Play之外的AhcWsClient的创建和使用.目前我跟这个:
import play.api.libs.ws.ahc.AhcWSClient
import akka.stream.ActorMaterializer
import akka.actor.ActorSystem
implicit val system = ActorSystem()
implicit val materializer = ActorMaterializer()
val ws = AhcWSClient()
val req = ws.url("http://example.com").get().map{
resp => resp.body
}(system.dispatcher)
Run Code Online (Sandbox Code Playgroud)
这是创建一个正确的方法AhcWsClient吗?有没有办法创造一个AhcWSClient没有ActorSystem?
scala ×3
append ×1
collections ×1
keras ×1
listbuffer ×1
python ×1
real-time ×1
tensorflow ×1
web-services ×1