多线程

concurrent.futures是一个非常简单易用的库,主要用来实现多线程和多进程的异步并发。

1
Executor.submit(fn, *args, **kwargs)
fn:需要异步执行的函数
*args, **kwargs:fn参数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
def fake_job(id, dummy_data):
print("[start] job: " + str(id))
time.sleep(4)
print("[end] job: " + str(id))
return str(id) + dummy_data + "aaa"


futures = [] #进程集
with futures.ThreadPoolExecutor(max_workers=None) as executor:
f = executor.submit(fake_job, i, "lalala")
futures.append(f)
results = [f.result() for f in futures] #遍历返回结果,如果未完成等待
```
备注:
max_workers:最大线程数(None表示自动根据核心数调整)

### requests连接数达到上限

requests默认是长连接,连接不会立刻关闭。所以大量请求会导致连接数MAX
```python
headers = {
'Connection': 'close',
}
s = requests.Session()
with requests.Session() as s:
result_data = s.get(url, headers=headers)
return result_data.text

关闭长连接,不会发生连接数饱和的错误