主页 > 知识库 > golang协程池模拟实现群发邮件功能

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

热门标签:服务外包 AI电销 百度竞价排名 Linux服务器 地方门户网站 铁路电话系统 呼叫中心市场需求 网站排名优化

比如批量群发邮件的功能

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

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

可以使用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协程池模拟实现群发邮件功能》,本文关键词  ;如发现本文内容存在版权问题,烦请提供相关信息告之我们,我们将及时沟通与处理。本站内容系统采集于网络,涉及言论、版权与本站无关。
  • 相关文章
  • 收缩
    • 微信客服
    • 微信二维码
    • 电话咨询

    • 400-1100-266