go concurrency ftp

cargar golang a través de FTP y obtener el progreso de FTP al mismo tiempo



concurrency (1)

Actualmente, ambos tienen la misma instancia de ftp (var ftp * goftp.FTP) que se bloquean entre sí ya que tienen una condición de carrera. Y tu resultado es impredecible. En algún momento, da el resultado correcto cuando primero se ejecuta correctamente. O cuando espera el segundo y luego se ejecuta completamente. O cuando primero no se ejecuta. De lo contrario, ambas rutinas se bloquean entre sí. Solutons:

  • Toma dos instancias diferentes de ftp para dar diferentes conexiones a la rutina

    var ftp,ftp1 *goftp.FTP

Me gusta aquí Juega Golang O

  • Tener * goftp stor primero en la rutina principal. Luego comienza otra rutina. Pero derrotará el propósito de la segunda rutina.

He usado http://github.com/dutchcoders/goftp para enviar un archivo a través de FTP. Funciona normalmente, pero cuando quiero cargar un archivo y obtener esa información de archivo (al mismo tiempo) ¡No funciona!

fileName := "sth" var err error var ftp *goftp.FTP if ftp, err = goftp.Connect("serverip:port"); err != nil { fmt.Println(err) } defer ftp.Close() config := tls.Config{ InsecureSkipVerify: true, ClientAuth: tls.RequestClientCert, } if err = ftp.AuthTLS(config); err != nil { // log.Println("1", err) } if err = ftp.Login("userName", "pass"); err != nil { log.Println("2", err) } // if err = ftp.Cwd("/home/myDir/"); err != nil { log.Println("3", err) } var file *os.File if file, err = os.Open(fileName); err != nil { log.Println("6", err) } defer file.Close() fmt.Println("start") go func() { fmt.Println("first") nmp := ftp.Stor(fileName, file) if nmp != nil { log.Println("7", err) } else { fmt.Println("first is runung") } }() go func() { fmt.Println("second") for { files, nms := ftp.List(fileName) if nms == nil { fmt.Println(files) } time.Sleep(1 * time.Second) } }() fmt.Println("end") var mnmn string fmt.Scan(&mnmn)

ftp.Stor func no se ejecutará y mi código regresa por debajo de los resultados:

start end first second 2016/05/31 13:21:38 7 <nil> [] []