Help us shape the future of Go! Take the 2026 Go Developer Survey

gotask

package module
v0.0.15 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 29, 2019 License: Apache-2.0 Imports: 8 Imported by: 0

README

gotask

task for go

package gotask_test

import (
	"fmt"
	"github.com/pubgo/errors"
	"github.com/pubgo/gotask"
	"github.com/rs/zerolog"
	"io"
	"net/http"
	"testing"
	"time"
)

func init() {
	gotask.InitDebugLog()
}

func TestTasks(t *testing.T) {
	defer errors.Assert()

	//zerolog.SetGlobalLevel(zerolog.WarnLevel)
	fn := errors.Try(func(i int) {
		defer errors.Resp(func(err *errors.Err) {
			fmt.Println(err.P())
		})

		errors.T(i == 29, "90999 error")
	})

	var task = gotask.NewTask(10, time.Second+time.Millisecond*10)
	defer task.Stop()

	for i := 0; i < 100; i++ {
		task.Do(fn, i)
	}

	task.Wait()
	errors.P("stat", task.Stat())
}

func TestErrLog(t *testing.T) {
	defer errors.Assert()

	fn := errors.Try(func(i int) {
		defer errors.Resp(func(err *errors.Err) {
			fmt.Println(err.P())
		})

		errors.T(i == 90999, "90999 error")
	})

	var task = gotask.NewTask(500, time.Second+time.Millisecond*10)
	for i := 0; i < 100000; i++ {
		go task.Do(fn, i)
	}
	task.Wait()
	errors.P("stat", task.Stat())
}

func parserArticleWithReadability(i int) {
	errChan := make(chan bool)
	go func() {
		time.Sleep(time.Second * 4)
		errChan <- true
	}()

	for {
		select {
		case <-time.After(3 * time.Second):
			errors.Wrap("readbility timeout", "等待 %d", i)
		case <-errChan:
			return
		}
	}

}

func TestW(t *testing.T) {
	defer errors.Assert()

	fn := errors.Try(func(i int) {
		errors.ErrHandle(errors.Try(func() {})(func() {
			parserArticleWithReadability(i)
			fmt.Println("ok", i)
		}), func(err *errors.Err) {
			errors.Wrap(err, "testW")
		})
	})

	var task = gotask.NewTask(10000, time.Second*2)
	for i := 0; i < 1000000; i++ {
		task.Do(fn, i)
	}
	task.Wait()
	errors.P("stat", task.Stat())
}

func isEOF(err error) bool {
	return err == io.EOF || err == io.ErrUnexpectedEOF
}

func TestUrl(t *testing.T) {
	defer errors.Assert()

	zerolog.SetGlobalLevel(zerolog.WarnLevel)

	client := &http.Client{Transport: &http.Transport{
		MaxIdleConns:       10,
		IdleConnTimeout:    3 * time.Second,
		DisableCompression: true,
	}}
	client.Timeout = 5 * time.Second

	fn := errors.Try(func(c *http.Client, i int) {
		errors.Panic(errors.Retry(3, func() {
			fmt.Println("try: ", i)
			req, err := http.NewRequest(http.MethodGet, "https://www.yuanben.io", nil)
			errors.Panic(err)

			resp, err := c.Do(req)
			errors.Panic(err)
			errors.T(resp.StatusCode != http.StatusOK, "状态不正确%d", resp.StatusCode)
		}))
	})

	var task = gotask.NewTask(200, time.Second*2)
	for i := 0; i < 3000; i++ {
		task.Do(fn, client, i)
	}
	task.Wait()
	fmt.Println(task.Stat())
}

Documentation

Index

Constants

This section is empty.

Variables

View Source
var InitDebugLog = _InitDebugLog
View Source
var NewTask = _NewTask

handle

Functions

This section is empty.

Types

type Stat added in v0.0.12

type Stat = _Stat

type Task

type Task = _Task

type TaskFn

type TaskFn func(...interface{}) func(...interface{}) (err error)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL