- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Apache Prediction IO 开发推荐引擎。在事件服务器之前,我有一个 GO api,用于监听来自客户和进口商的事件。在客户使用导入器的特定情况下,我收集导入的身份,并将 json 从导入器 api 发送到 GO api。例如,如果用户导入一个包含 45000 个数据的 csv,我会将这 45000 个身份以 json 格式发送到 GO api,例如 {"barcodes":[...]}
。 .预测 IO 事件服务器需要特定形状的数据。
type ItemEvent struct {
Event string `json:"event"`
EntityType string `json:"entityType"`
EntityId string `json:"entityId"`
Properties map[string][]string `json:"properties"`
EventTime time.Time `json:"eventTime"`
}
type ItemBulkEvent struct {
Event string `json:"event"`
Barcodes []string `json:"barcodes"`
EventTime time.Time `json:"eventTime"`
}
ItemEvent
是我将从 GO Api 发送到事件服务器的最终数据。
ItemBulkEvent
是我从进口商 api 收到的数据。
func HandleItemBulkEvent(w http.ResponseWriter, r *http.Request) {
var itemBulk model.ItemBulkEvent
err := decode(r,&itemBulk)
if err != nil {
log.Fatalln("handleitembulkevent -> ",err)
util.RespondWithError(w,400,err.Error())
}else {
var item model.ItemEvent
item.EventTime = itemBulk.EventTime; item.EntityType = "item"; item.Event = itemBulk.Event
itemList := make([]model.ItemEvent,0,50)
for index, barcode := range itemBulk.Barcodes{
item.EntityId = barcode
if (index > 0 && (index % 49) == 0){
itemList = append(itemList, item)
go sendBulkItemToEventServer(w,r,itemList)
itemList = itemList[:0]
}else if index == len(itemBulk.Barcodes) - 1{
itemList = append(itemList, item)
itemList = itemList[:( (len(itemBulk.Barcodes) - 1) % 49)]
go sendBulkItemToEventServer(w,r,itemList) // line 116
itemList = itemList[:0]
} else{
itemList = append(itemList, item)
}
}
util.RespondWithJSON(w,200,"OK")
}
}
HandleItemBulkEvent
是批量更新的处理函数。在这一步中,我应该提到预测 io 的批量上传。通过 rest api 预测 io 事件服务器每个请求需要 50 个事件。所以我创建了一个包含 50 个上限和一个项目的列表。我使用相同的项目,只是每次都更改身份部分(条形码)并添加到列表中。在每 50 个项目中,我使用了一个处理函数,该函数将该列表发送到事件服务器,然后清理该列表,依此类推。
func sendBulkItemToEventServer(w http.ResponseWriter, r *http.Request, itemList []model.ItemEvent){
jsonedItem,err := json.Marshal(itemList)
if err != nil{
log.Fatalln("err marshalling -> ",err.Error())
}
// todo: change url to event server url
resp, err2 := http.Post(fmt.Sprintf("http://localhost:7070/batch/events.json?accessKey=%s",
r.Header.Get("Authorization")),
"application/json",
bytes.NewBuffer(jsonedItem))
if err2 != nil{
log.Fatalln("err http -> " , err.Error()) // line 141
}
defer resp.Body.Close()
}
sendBulkItemToEventServer
函数编码传入的项目列表并向预测 io 的事件服务器发出发布请求。在这部分中,当我尝试使用 5000+- 项目时它做得很好,但是当我尝试使用 45000 项目时,应用程序崩溃并出现以下错误。
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0xc05938]
goroutine 620 [running]:
api-test/service.sendBulkItemToEventServer(0x1187860, 0xc00028e0e0, 0xc00029c200, 0xc00011c000, 0x31, 0x32)
/home/kadirakinkorkunc/Desktop/playground/recommendation-engine/pio_api/service/CollectorService.go:141 +0x468
created by api-test/service.HandleItemBulkEvent
/home/kadirakinkorkunc/Desktop/playground/recommendation-engine/pio_api/service/CollectorService.go:116 +0x681
Debugger finished with exit code 0
知道如何解决这个问题吗?
2020/08/03 15:11:55 err http -> Post "http://localhost:7070/batch/events.json?accessKey=FJbGODbGzxD-CoLTdwTN2vwsuEEBJEZc4efrSUc6ekV1qUYAWPu5anDTyMGDoNq1": read tcp 127.0.0.1:54476->127.0.0.1:7070: read: connection reset by peer
对此有任何想法吗?
最佳答案
您的程序中有几个错误。运行时错误是因为您正在检查 err2
不是零,但是你正在打印 err
,而不是 err2
. err
为零,因此运行时错误。
这意味着 err2
不是零,所以你应该看到那个错误是什么。
您提到您正在分批发送 50 条消息,但该实现是错误的。您将元素添加到 itemList
, 然后用 itemList
启动一个 goroutine ,然后截断它并重新开始填充。这是一场数据竞赛,你的 goroutine 将看到 itemList
处理程序正在修改的实例。而不是截断,只需创建一个新的 itemList
当您向 goroutine 提交一个时,每个 goroutine 都可以拥有自己的副本。
如果您想继续使用相同的 slice ,您可以编码 slice ,然后将 JSON 消息传递给 goroutine 而不是 slice 。
关于http - panic : runtime error: invalid memory address or nil pointer dereference with bigger data,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63222424/
我需要某种可以执行以下操作的 JavaScript: 我需要一些小的绿色文本。然后该文本应该变得越来越大,然后以某种方式消失。这总共大约需要 2-3 秒。我需要在网站的不同位置放置几个这样的文本,这意
我需要检查一天中的时间是否在 8 点到 23 点之间。 我想这样写: 如果(8 < 小时 < 23){...} 但是没有用。然后,我在网上搜索了比较运算符。我没有找到我要找的东西。您知道如何检查一天中
我以 GLPaint 为例...我试图将背景放入“PaintingView”中,这样您就可以在背景上绘制并最终将图像保存为文件...我迷路了. 我正在加载 PNG (512x512) 并尝试在程序
我不明白为什么在这个设置中 padding-top 比 padding-bottom 大几倍。尝试调整周围的东西以找到罪魁祸首的属性(property),但到目前为止一无所获。我确实注意到,我不小心在
我有 11Mb 的 JSON 文件,这些文件将在 Dao 上写入,但是当我保存所有数据时。我收到了这个错误; /data/user/0/com.test.save/databases/ChannelD
因此,我在使用 PostgreSQL 时目睹了以下行为。 我有一个这样的表:(id INTEGER ..., msg VARCHAR(2000))然后我运行两个程序 A 和 B 做完全相同的事情,即进
我需要建立一个带有条件的三元运算符:只要 URL 是/index/加上任何大于“1”的数字,X 就成立。 我尝试了这个(带有“to”属性的字符串: = 2) ) ? '36vh' : '0vh' }}
我正在尝试调整 UIImage 的大小 在 UIImage 之前: 在这段代码和 UIImage 之后: UIGraphicsBeginImageContext (CGPointMake(155,13
double 变量大于 0.0 的控制正常。我很好奇具有此功能的编译 exe 是否会在不同系统上表现不同。 bool MyFunction(double x) { if (x > 0.0)
表格: 预订:id, user_id, object_id, date1, ... booking_status: id, book_id, status status 是整数,范围从 1 到 9(请
我正在尝试制作一个菜单,该菜单会在单击以激活它的 div 的右侧打开。但是,我不明白如何才能正确定位。我希望最后一个 li 的底部(我存储子菜单选项的地方)与激活弹出窗口的 div 底部齐平。然而,给
我尝试使用以下 sql 选择表(Postgres DB)的所有记录: SELECT * FROM 'tablename' WHERE 'myTimestampRow' >= now() 总是有一条错误
我需要一些帮助来使我的 cph 图更大,但不幸的是,figsize 似乎无法应用于此图!有人可以帮我吗? 我在 pandas 上使用 Jupyter Notebook! cph.plot() 这里的问
我正在使用 https://github.com/Foliotek/Croppie裁剪图像: var basic = $('#demo-basic').croppie({ vi
一个简单的问题:让更多的节点拆分资源还是让更少的“更强”节点更可取? 最佳答案 这是可靠性、复制与一般性能的对比。 假设固定数量的磁盘、CPU 和 RAM 均匀分布在具有 X_1 个节点的集群和具有
Using Playwright and Python, how can I expect for count bigger or smaller than?使用Playwright和Pytho
Using Playwright and Python, how can I expect for count bigger or smaller than?使用Playwright和Pytho
假设我想在一个大号(300,000个字母)中找到“dogs”一词,并且字母之间的距离恰好是之间的40,000个字母。所以我做: $mystring =~ m/d.{40000}o.{40000}g.{
我正在使用 图表 haskell 绘图框架。下面的代码旨在生成一个橙色六边形,上面叠加有文本“(0,0)”。不幸的是,文本很小。我试图通过修改 rect 的大小来使它更大,但没有运气。 import
sns.boxplot(data=df, width=0.5) plt.title(f'Distribution of scores for initial and resubmission\
我是一名优秀的程序员,十分优秀!