我需要添加线程到这个代码如何做到这一点?



我需要添加线程到这段代码,但它不工作。老师建议创建一个列表来存储要使用的参数,但我不知道该怎么做

a = 1
b = 3
E = 0.07
def f(x):
return x**4
def quad(left, right, fleft, fright, lr_area):
mid = (left + right)/2
fmid = f(mid)
l_area = ((fleft + fmid)*(mid - left)/2)
r_area = ((fmid + fright)*(right - mid)/2)
if abs((l_area + r_area) - lr_area) > E:
l_area = quad(left, mid, fleft, fmid, l_area)
r_area = quad(mid, right, fmid, fright, r_area)
return l_area + r_area
S = quad(a, b, f(a), f(b), (f(a) + f(b))*(b-a)/2)
print (S)
在你的建议下,我尽量不碰递归,通过流解决问题,但我得到了错误的答案。 下面新增代码
import threading
import time

a = 1
b = 3
E = 0.07

def f(x):
return x**4



def quad(left, right, fleft, fright, lr_area):
mid = (left + right)/2
fmid = f(mid)
l_area = ((fleft + fmid)*(mid - left)/2)
r_area = ((fmid + fright)*(right - mid)/2)
atribute_list = []
if abs((l_area + r_area) - lr_area) > E:
l_area1 = threading.Thread(target=quad, args=(left, mid, fleft, fmid, l_area,))
r_area1 = threading.Thread(target=quad, args=(mid, right, fmid, fright, r_area,))

l_area1.start()
r_area1.start()

l_area1.join()
r_area1.join()
time.sleep(1)
print(atribute_list)

return atribute_list

S = quad(a, b, f(a), f(b), (f(a) + f(b))*(b-a)/2)

print(S)

这是我的代码,如果有人感兴趣的话

import threading
a = 1
b = 3
E = 0.07
st = int(input("Write number: "))

def f(x):
return x**st
lparametrs_list = [a, b, f(a), f(b), (f(a) + f(b))*(b-a)/2]
rparametrs_list = [a, b, f(a), f(b), (f(a) + f(b))*(b-a)/2]

def llist_updater(l_list):
lparametrs_list.clear()
for i in l_list:
lparametrs_list.append(i)
return lparametrs_list

def rlist_updater(r_list):
rparametrs_list.clear()
for i in r_list:
rparametrs_list.append(i)
return rparametrs_list

def quad(left, right, fleft, fright, lr_area):
mid = (left + right)/2
fmid = f(mid)
l_area = ((fleft + fmid)*(mid - left)/2)
r_area = ((fmid + fright)*(right - mid)/2)
if abs((l_area + r_area) - lr_area) > E:
l_list = [left, mid, fleft, fmid, l_area]
lthr = threading.Thread(target=llist_updater, args=(l_list,))
lthr.start()
lthr.join()
l_area = quad(*lparametrs_list)
r_list = [mid, right, fmid, fright, r_area]
rthr = threading.Thread(target=rlist_updater, args=(r_list,))
rthr.start()
rthr.join()
r_area = quad(*rparametrs_list)
return l_area + r_area
S = quad(a, b, f(a), f(b), (f(a) + f(b))*(b-a)/2)
print(S)

最新更新