From a27e61b5ba4b2d510d00f6cdd6613e596662af2e Mon Sep 17 00:00:00 2001 From: qydysky Date: Wed, 6 Jan 2021 21:34:14 +0800 Subject: [PATCH] =?utf8?q?98=20log=20reqf=20bug=20=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- Reqf.go | 8 ++++++-- log/Log.go | 29 +++++++++++++++++++++-------- msgq/Msgq_test.go | 33 +++++++++++++++++++++++++++++++++ 3 files changed, 60 insertions(+), 10 deletions(-) diff --git a/Reqf.go b/Reqf.go index 08b1485..1990258 100644 --- a/Reqf.go +++ b/Reqf.go @@ -122,11 +122,15 @@ func (this *req) Reqf_1(val Rval) (error) { req,_ := http.NewRequest(Method, Url, body) req = req.WithContext(cx) + var done = make(chan struct{}) + defer close(done) go func(){ this.cancel = make(chan interface{}) this.cancelOpen = true - <- this.cancel - cancel() + select { + case <- this.cancel:cancel() + case <- done: + } }() if _,ok := Header["Accept"];!ok {Header["Accept"] = `text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8`} diff --git a/log/Log.go b/log/Log.go index d81a229..e52ce95 100644 --- a/log/Log.go +++ b/log/Log.go @@ -30,6 +30,7 @@ type Config struct { type Msg_item struct { Prefix string Msg_obj []interface{} + Config } //New 初始化 @@ -42,25 +43,26 @@ func New(c Config) (o *Log_interface) { if c.File != `` {p.File().NewPath(c.File)} - o.MQ = m.New(10) + o.MQ = m.New(100) o.MQ.Pull_tag(map[string]func(interface{})(bool){ `block`:func(data interface{})(bool){ if v,ok := data.(*s.Signal);ok{v.Done()} return false }, `L`:func(data interface{})(bool){ + msg := data.(Msg_item) var showObj = []io.Writer{} - if o.Stdout {showObj = append(showObj, os.Stdout)} - if o.File != `` { - file, err := os.OpenFile(o.File, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666) + if msg.Stdout {showObj = append(showObj, os.Stdout)} + if msg.File != `` { + file, err := os.OpenFile(msg.File, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666) if err == nil { showObj = append(showObj, file) defer file.Close() }else{log.Println(err)} } log.New(io.MultiWriter(showObj...), - data.(Msg_item).Prefix, - log.Ldate|log.Ltime).Println(data.(Msg_item).Msg_obj...) + msg.Prefix, + log.Ldate|log.Ltime).Println(msg.Msg_obj...) return false }, }) @@ -76,7 +78,17 @@ func New(c Config) (o *Log_interface) { // func Copy(i *Log_interface)(o *Log_interface){ - o = New((*i).Config) + o = new(Log_interface) + //设置 + o.Config = (*i).Config + o.MQ = (*i).MQ + {//启动阻塞 + b := s.Init() + for b.Islive() { + o.MQ.Push_tag(`block`,b) + time.Sleep(time.Duration(20)*time.Millisecond) + } + } return } @@ -91,7 +103,7 @@ func (I *Log_interface) Level(log map[string]struct{}) (O *Log_interface) { //Open 日志不显示 func (I *Log_interface) Log_show_control(show bool) (O *Log_interface) { - O=I + O = Copy(I) // O.Block(100) O.Stdout = show @@ -136,6 +148,7 @@ func (I *Log_interface) L(prefix string, i ...interface{}) (O *Log_interface) { O.MQ.Push_tag(`L`,Msg_item{ Prefix:prefix, Msg_obj:append(O.Base_string, i), + Config:O.Config, }) return } \ No newline at end of file diff --git a/msgq/Msgq_test.go b/msgq/Msgq_test.go index 98157e1..a226f7e 100644 --- a/msgq/Msgq_test.go +++ b/msgq/Msgq_test.go @@ -3,6 +3,8 @@ package part import ( "time" "fmt" + "net/http" + _ "net/http/pprof" "testing" p "github.com/qydysky/part" ) @@ -234,3 +236,34 @@ func Test_msgq5(t *testing.T) { } t.Log(`fin`) } + +func Test_msgq6(t *testing.T) { + mq := New(30) + go func() { + http.ListenAndServe("0.0.0.0:8899", nil) + }() + go mq.Pull_tag(map[string]func(interface{})(bool){ + `A1`:func(data interface{})(bool){ + return false + }, + `A2`:func(data interface{})(bool){ + if v,ok := data.(string);!ok || v != `a11`{t.Error(`2`)} + return false + }, + `Error`:func(data interface{})(bool){ + if data == nil {t.Error(`out of list`)} + return false + }, + }) + + var fin_turn = 0 + t.Log(`start`) + for fin_turn < 1000 { + time.Sleep(time.Second) + time.Sleep(time.Second) + mq.Push_tag(`A1`,`a11`) + fin_turn+=1 + fmt.Print("\r",fin_turn) + } + t.Log(`fin`) +} -- 2.39.2