代码解释
代码功能为建立十个子线程,每个线程负责计算1000个表格元素,并讲1000个表格元素填入全局表格。
此处需要注意在填写全局表格时需要使用锁。
全局表格一共10000个元素,每个元素的值为
x
2
x^2
x2,
x
x
x为索引值。
代码基于python3.8开发。
代码
import time
import threading
from threading import Thread
def seq(x):
return x**2
def my_threadfunc(y,lock):
# 计算部分列表
if y == 9:
num_list = [seq(i) for i in range(y*1000,(y+1)*1000)]
else:
num_list = [seq(i) for i in range(y*1000,(y+1)*1000+1)]
#下面部分要修改全局表 因此需要加锁
lock.acquire() # 加锁
try:
if y == 9:
my_list[y*1000:(y+1)*1000] = num_list
else:
my_list[y*1000:(y+1)*1000+1] = num_list
finally:
# 修改完成,释放锁
lock.release()
global my_list
my_list = [0 for i in range(10000)] # 全局表
lock = threading.RLock() # 锁
thread_list = [] # 线程表
#建立10个线程并开始计算
for i in range(10):
t = Thread(target=my_threadfunc, args = (i,lock))
t.start()
thread_list.append(t)
print(len(my_list))
- 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
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39