• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    golang协程池模拟实现群发邮件功能

    比如批量群发邮件的功能

    因为发送邮件是个比较耗时的操作,

    如果是传统的一个个执行 , 总体耗时比较长

    可以使用golang实现一个协程池 , 并行发送邮件

    pool包下的pool.go文件

    package pool
    
    import "log"
    //具体任务,可以传参可以自定义操作
    type Task struct {
        Args interface{}
        Do func(interface{})error
    }
    //协程的个数
    var Nums int
    //任务通道
    var JobChannels =make(chan Task)
    //入口的任务通道
    var Jobs =make(chan Task)
    //执行
    func Run(){
        for i:=0;iNums;i++{
            go worker(i)
        }
        for task:=range Jobs{
            JobChannels-task
        }
        close(JobChannels)
    }
    //实际的工作协程worker
    func worker(workId int){
        for task:=range JobChannels{
            ret:=task.Do(task.Args)
            log.Printf("worker_id:%d , worker_ret:%v\n",workId,ret)
        }
    }

    具体的使用

    test包下的pool_test.go测试文件

    package test
    import (
        "errors"
        "gofly/pool"
        "log"
        "testing"
        "time"
    )
    //真正的模拟发送邮件
    func SendEmail(email interface{})error{
        log.Println(email," start..")
        //模拟耗时
        time.Sleep(time.Second*10)
        return errors.New(email.(string)+" end..")
    }
    //获取邮箱并发送
    func GetEmails(){
        //如果数据量比较大分页获取
        page:=1;
        for{
            //模拟每页获取的邮箱
            emails:=[]string{
                "1@qq.com",
                "2@qq.com",
                "3@qq.com",
                "4@qq.com",
                "5@qq.com",
                "6@qq.com",
                "7@qq.com",
            }
            for _,email:=range emails{
                var sendEmailTask=pool.Task{
                    Args: email,
                    Do: SendEmail,
                }
                //每个邮箱任务塞入任务通道
                pool.Jobs - sendEmailTask
            }
            log.Printf("page %d done!\n",page)
            page++
        }
    }
    func TestPool(t *testing.T) {
        //定义5个协程
        pool.Nums = 5
        //开个子协程去不停的获取邮箱
        go GetEmails()
        //执行
        pool.Run()
    }

    执行go test -v pool_test.go , 效果

    到此这篇关于golang协程池模拟实现群发邮件功能的文章就介绍到这了,更多相关golang协程池群发邮件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    您可能感兴趣的文章:
    • golang协程池设计详解
    • golang 40行代码实现通用协程池
    • GO实现协程池管理的方法
    上一篇:golang 比较浮点数的大小方式
    下一篇:go等待一组协程结束的操作方式
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    golang协程池模拟实现群发邮件功能 golang,协程池,模拟,实现,