我很好奇python如何实现多线程以及GIL如何影响性能。我刚开始在虚拟机ubuntu 15.04 guest上测试一些简单的python脚本性能。但我遇到了一个问题:多线程脚本在执行一小段时间后就被杀死了。
修改
我发现问题出在了:
for _ in range(200000000):
如果我将范围(python 2.7)更改为xrange,那么它会没问题。 我知道这是因为range返回一个列表而xrange只返回一个迭代器。 但我仍然想知道range()的限制是什么。
我的测试环境:
NAME =“Ubuntu”
VERSION =“15.04(Vivid Vervet)”
2015 x86_64 x86_64 x86_64 GNU / Linux
Linux 3.19.0-15-generic(simon-VirtualBox)12/06/2016 _x86_64_(1 CPU)
脚本
#! /usr/bin/python
from threading import Thread
import time
def my_counter():
i = 0
for _ in range(100000000):
i = i + 1
return True
def main():
thread_array = {}
start_time = time.time()
for tid in range(2):
t = Thread(target=my_counter)
t.start()
thread_array[tid] = t
for i in range(2):
thread_array[i].join()
end_time = time.time()
print("Total time: {}".format(end_time - start_time))
if __name__ == '__main__':
main()
输出
simon@simon-VirtualBox:~/Dropbox/python/GIL$ time py multiThread.py
Killed
real 0m6.712s
user 0m2.832s
sys 0m3.056s
问题
这个问题与单个cpu有关,还是我误解了什么?