秦悦明的运维笔记

python 线程与进程

0. 计算100w随机数的和,分别用多进程和多线程,结果是在同样的环境下,多进程更能压榨每个cpu使用率,因为GIL的存在,所以python里面的多线程效率有瓶颈。

当然老司机知道,这种cpu密集的运算,本来就不应该用多线程来做,这是后话。
例子是抄的,对比一下很明显。

1
2
3
4
5
6
7
8
9
10
import multiprocessing
import random
def compute(n):
return sum(
[random.randint(1, 100) for i in range(1000000)])
pool = multiprocessing.Pool(8)
print "results: %s" % pool.map(compute, range(8))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import random
import threading
results = []
def compute():
results.append(sum(
[random.randint(1, 100) for i in range(1000000)]))
workers = [threading.Thread(target=compute) for x in range(8)]
for worker in workers:
worker.start()
for worker in workers:
worker.join()
print "results: %s" % results