Contents
19. Goroutines(并发)¶
请注意,在运行这些命令时,编号在两次运行之间的顺序不同。在Python示例中,当所有请求完成后,它将自动退出。
19.1. Python¶
#!/usr/bin/env python
# -*- coding:utf8 -*-
# auther; 18793
# Date:2020/4/21 13:50
# filename: sample1.py
import urllib.request
import urllib.error
import multiprocessing
def f(url):
try:
req = urllib.request.urlopen(url)
print(len(req.read()))
finally:
req.close()
urls = (
"http://www.peterbe.com",
"http://peterbe.com",
"http://htmltree.peterbe.com",
"http://tflcameras.peterbe.com",
)
if __name__ == '__main__':
p = multiprocessing.Pool(3)
p.map(f, urls)
19.2. Go¶
package main
import (
"fmt"
"io/ioutil"
"net/http"
)
func f(url string) {
response, err := http.Get(url)
if err != nil {
panic(err)
}
defer response.Body.Close()
body, err1 := ioutil.ReadAll(response.Body)
if err1 != nil {
panic(err1)
}
fmt.Println(len(body))
}
func main() {
urls := []string{
"http://www.peterbe.com",
"http://peterbe.com",
"http://htmltree.peterbe.com",
"http://tflcameras.peterbe.com",
}
for _, url := range urls {
// 开启Goroutines
go f(url)
}
// necessary so it doesn't close before
// the goroutines have finished
var input string
fmt.Scanln(&input)
}