主頁(yè) > 知識(shí)庫(kù) > golang協(xié)程池模擬實(shí)現(xiàn)群發(fā)郵件功能

golang協(xié)程池模擬實(shí)現(xiàn)群發(fā)郵件功能

熱門標(biāo)簽:評(píng)價(jià)高的400電話辦理 阿克蘇地圖標(biāo)注 excel地圖標(biāo)注分布數(shù)據(jù) 外呼系統(tǒng)顯本地手機(jī)號(hào) 電話機(jī)器人軟件免費(fèi) 壽光微信地圖標(biāo)注 百度地圖標(biāo)注后傳給手機(jī) 涿州代理外呼系統(tǒng) 外呼系統(tǒng)用什么卡

比如批量群發(fā)郵件的功能

因?yàn)榘l(fā)送郵件是個(gè)比較耗時(shí)的操作,

如果是傳統(tǒng)的一個(gè)個(gè)執(zhí)行 , 總體耗時(shí)比較長(zhǎng)

可以使用golang實(shí)現(xiàn)一個(gè)協(xié)程池 , 并行發(fā)送郵件

pool包下的pool.go文件

package pool

import "log"
//具體任務(wù),可以傳參可以自定義操作
type Task struct {
    Args interface{}
    Do func(interface{})error
}
//協(xié)程的個(gè)數(shù)
var Nums int
//任務(wù)通道
var JobChannels =make(chan Task)
//入口的任務(wù)通道
var Jobs =make(chan Task)
//執(zhí)行
func Run(){
    for i:=0;iNums;i++{
        go worker(i)
    }
    for task:=range Jobs{
        JobChannels-task
    }
    close(JobChannels)
}
//實(shí)際的工作協(xié)程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測(cè)試文件

package test
import (
    "errors"
    "gofly/pool"
    "log"
    "testing"
    "time"
)
//真正的模擬發(fā)送郵件
func SendEmail(email interface{})error{
    log.Println(email," start..")
    //模擬耗時(shí)
    time.Sleep(time.Second*10)
    return errors.New(email.(string)+" end..")
}
//獲取郵箱并發(fā)送
func GetEmails(){
    //如果數(shù)據(jù)量比較大分頁(yè)獲取
    page:=1;
    for{
        //模擬每頁(yè)獲取的郵箱
        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,
            }
            //每個(gè)郵箱任務(wù)塞入任務(wù)通道
            pool.Jobs - sendEmailTask
        }
        log.Printf("page %d done!\n",page)
        page++
    }
}
func TestPool(t *testing.T) {
    //定義5個(gè)協(xié)程
    pool.Nums = 5
    //開個(gè)子協(xié)程去不停的獲取郵箱
    go GetEmails()
    //執(zhí)行
    pool.Run()
}

執(zhí)行g(shù)o test -v pool_test.go , 效果

到此這篇關(guān)于golang協(xié)程池模擬實(shí)現(xiàn)群發(fā)郵件功能的文章就介紹到這了,更多相關(guān)golang協(xié)程池群發(fā)郵件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • golang協(xié)程池設(shè)計(jì)詳解
  • golang 40行代碼實(shí)現(xiàn)通用協(xié)程池
  • GO實(shí)現(xiàn)協(xié)程池管理的方法

標(biāo)簽:重慶 銅川 汕頭 蘭州 吐魯番 梅河口 雞西 欽州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《golang協(xié)程池模擬實(shí)現(xiàn)群發(fā)郵件功能》,本文關(guān)鍵詞  golang,協(xié)程池,模擬,實(shí)現(xiàn),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《golang協(xié)程池模擬實(shí)現(xiàn)群發(fā)郵件功能》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于golang協(xié)程池模擬實(shí)現(xiàn)群發(fā)郵件功能的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章