我需要同时从多个goroutine(例如30个)向文本文件中写入大量数据。我的工作是这样:
f
但这在某些情况下似乎不起作用。这里的*os.File
是'captcha' => function($attribute, $val, $fail)use($request) {
if(!empty(session('captcha_validated_reset_account'))&&session('captcha_validated_reset_account')==$request->input('account')){
return;
}else{
Rule::required... //and call a rule named 'captcha' to validate the captcha code from user input
//return 'required|captcha';
}
}
对象。在某些情况下,这根本不会写入文件,在某些情况下,它会写入一些数据,但以后不会写入。行为非常不一致,也没有错误。
有什么想法可能会发生这种情况吗?
答案 0 :(得分:3)
问题是您有多个goroutine试图一次写入一个文件,而没有任何同步。这将导致不可预知的输出顺序,并可能丢失写入。在此之上使用缓冲的I / O只会有助于掩盖行为。
最好的解决方案是启动一个写入您的输出的goroutine(根据需要,使用或不使用缓冲的I / O),并让所有工作人员将要写入的数据发送给goroutine。频道。