1. 程式人生 > >golang context.WithTimeout 超時處理

golang context.WithTimeout 超時處理

<span style="font-size:18px;color:#3333ff;">package main

import (
    "golang.org/x/net/context"
    "log"
    "math/rand"
    "time"
)

func test(is_first *bool, prev_map *map[string]string) {
    rand.Seed(int64(time.Now().Nanosecond()))
    ch := make(chan bool)
    ctx, _ := context.WithTimeout(context.Background(), 50*time.Millisecond)

    go func() {
        if *is_first {
            (*prev_map)["a"] = "1"
        } else {
            (*prev_map)["a"] = "2"
        }
        time.Sleep(time.Duration(rand.Intn(100)) * time.Millisecond)
        ch <- true
    }()

    select {
    case <-ch:
        *is_first = false
        (*prev_map)["b"] = "fast"
        return
    case <-ctx.Done():
        *is_first = true
        (*prev_map)["b"] = "slow"
        return
    }
}

func main() {
    is_first := true
    prev_map := make(map[string]string)
    for {
        test(&is_first, &prev_map)
        time.Sleep(time.Second)
        log.Println(prev_map, is_first)
    }
}</span>
<span style="font-size:18px;color:#3333ff;">[[email protected] test]$ go run main.go 
2016/08/18 23:22:26 map[a:1 b:fast] false
2016/08/18 23:22:27 map[a:2 b:slow] true
2016/08/18 23:22:28 map[a:1 b:slow] true
2016/08/18 23:22:29 map[a:1 b:fast] false
2016/08/18 23:22:30 map[b:fast a:2] false
2016/08/18 23:22:31 map[b:slow a:2] true
2016/08/18 23:22:32 map[a:1 b:fast] false
2016/08/18 23:22:33 map[a:2 b:slow] true
2016/08/18 23:22:34 map[a:1 b:slow] true
2016/08/18 23:22:35 map[a:1 b:slow] true
2016/08/18 23:22:36 map[a:1 b:slow] true
^Csignal: interrupt</span>

不要企圖終止goroutine,在select 中用方法包裝管道來實現。

相關推薦

golang context.WithTimeout 超時處理

<span style="font-size:18px;color:#3333ff;">package main import ( "golang.org/x/net/conte

HttpURLConnection超時處理

for back aik aqi neo can pac yun jcp Python%E5%85%A8%E6%A0%88%E5%BC%80%E5%8F%91%E4%B9%8B9%E3%80%81%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1%E3

C#中的多線程超時處理實踐

出現問題 可能性 readline col 似的 rms 應用 true 有一個 最近我正在處理C#中關於timeout行為的一些bug。解決方案非常有意思,所以我在這裏分享給廣大博友們。 我要處理的是下面這些情況: 我們做了一個應用程序,程序中有這麽一個模塊,它的功能向

Web服務器超時處理

number pen ceil headers poll() 總結 selector 工作 雪崩 來源 https://segmentfault.com/a/1190000000313184 Apache 一般在性能很高的情況下,缺省所有超時配置都是30秒,但是在上傳文件,

設置java函數的響應時間以及超時處理

seconds read rtt .com 釋放 debug ado err 圖片 一些事情的阻隔,然後把好不容易形成的習慣改變。想著嘗試改變,卻處處觸及底線,斂起觸角,繼續向前。不知不覺,距上次已有2個禮拜了。爾後,卿域非我,子視無卿。一、應用場景在有些時候,我們利用de

golang教程之錯誤處理

文章目錄 錯誤處理 什麼是錯誤? 例子 錯誤型別表示 從錯誤中提取更多資訊的不同方法 1.斷言底層結構型別並從結構域中獲取更多資訊 2.斷言底層結構型別並使用方法獲取更多資訊 3.直接比

介紹 golang json資料的處理

使用golang下的net/http模組,可以很容易的實現webserver功能。本篇就結合http模組在POST傳送josn資料給webserver以及webserver在收到json資料後如何處理。 一、server端處理json資料 server端程式碼如下: package ma

Golang對excel進行處理

國慶節祝我們的祖國更加繁榮昌盛,想必大家在國慶期間也好好放鬆了一下,中秋節過節停更了一次,家裡面有孩子了,放假期間希望能好好陪陪孩子,請大家諒解。今天發一篇技術文章,幫助大家逐漸迴歸到正常的工作狀態。 之前有關Golang的文章主要是基於Golang的標準庫來講解的,今天我們來看看Golan

記錄 FTPClient 超時處理的相關問題

apache 有個開源庫:commons-net,這個開源庫中包括了各種基礎的網路工具類,我使用了這個開源庫中的 FTP 工具。 但碰到一些問題,並不是說是開源庫的 bug,可能鍋得算在產品頭上吧,各種奇怪需求。 問題 當將網路限速成 1KB/S 時,使用 commons-net 開源庫中的 FTPCl

springboot中使用Hystrix做超時處理示例及問題分析

前言 此示例專案基於springboot 2.06 +hystrix 通過另一個專案在6543埠上開放一個介面,用於測試呼叫hystrix呼叫介面超時時候的處理策略。 具體實現 1. 開放介面 (此用於測試的介面我是在另一個springbo

Golang的配置資訊處理框架Viper【專案地址:https://github.com/spf13/viper】

轉自:http://blog.51cto.com/13599072/2072753 Viper 專案地址:https://github.com/spf13/viper 本文翻譯自該專案裡README.md檔案中的內容 有很多Go語言專案用到了Viper框架,比如: Hugo

go 短連線和長連線 超時處理 go 短連線和長連線 超時處理

go 短連線和長連線 超時處理 作為一個可能會和很多Client進行通訊互動的Server,首先要保證的就是整個Server執行狀態的穩定性,因此在和Client建立連線通訊的時候,確保連線的及時斷開非常重要,否則一旦和多個客戶端建立不關

wget 下載超時處理

wget 下載的時候會出現超時,需要加對應的引數 $imageArr = explode('data-objurl="', $imageList);  $firstArr = $imageListArr = array(); foreach ($imageArr as $k =>

【原創】PHP訪問MySQL查詢超時處理

                PHP連線MySQL主要是使用Mysql提供的 libmysqlclient 的客戶端庫,同時也延伸出來 mysql 和  mysqli 兩套PHP的擴充套件,相對來說 mysqli 比 mysql 更好,更穩定。目前兩個客戶端擴充套件庫連線超時可以設定選項來操作,比如mysq

Linux下connect超時處理【總結】

1、前言   最近在寫一個測試工具,要求快速的高效率的掃描出各個伺服器開放了哪些埠。當時想了一下,ping只能檢測ip,判斷伺服器的網路是連通的,而不能判斷是否開放了埠。我們知道埠屬於網路的傳輸層,因此需要用ip和埠來探測,這個時候就可以用connect來探測一下,針對TCP協議,connect函式要進行T

"SQL Server 不存在或訪問被拒絕","無法連線到伺服器,使用者xxx登陸失敗","連線超時"處理方法

一."SQL Server 不存在或訪問被拒絕" 這個是最複雜的,錯誤發生的原因比較多,需要檢查的方面也比較多. 一般說來,有以下幾種可能性: 1,SQL Server名稱或IP地址拼寫有誤 2,伺服器端網路配置有誤 3,客戶端網路配置有誤 要解決這個問題,我們一般要遵循以

Android 非同步和超時處理 例子

大家開發應用的時候往往會用到非同步處理,都是通過繼承AsyncTask實現,有時候也伴隨著超時做處理,過一段時間不管非同步執行完沒有都要做下一步事情, 那麼我這裡有一個簡單的例項大家可以看下: private static final int TIME_DELAY = 15

記錄一下golang http-server的處理流程。

原始碼位於go標準庫的net/http/server.go中。 1:從入口點http.ListenAndServe跟程式碼 func (srv *Server) ListenAndServe() error { addr := srv.Addr //獲取地址

Go語言(golang)的錯誤(error)處理的推薦方案

原文連結:www.flysnow.org/2019/01/01/… 微信公眾號:flysnow_org(飛雪無情) 對於Go語言(golang)的錯誤設計,相信很多人已經體驗過了,它是通過返回值的方式,來強迫呼叫者對錯誤進行處理,要麼你忽略,要麼你處理(處理也可以是繼續返回給呼叫者),對於gola

tcp連線超時處理

設定connect超時很簡單,CSDN上也有人提到過使用select,但卻沒有一個令人滿意與完整的答案。偶所講的也正是select函式,此函式整合在winsock1.1中,簡單點講,"作用使那些想避免在套接字呼叫過程中被鎖定的應用程式,採取一種有序的方式,同時對多個套接字