gpt4 book ai didi

python - 为什么程序执行时间和以前一样?

转载 作者:行者123 更新时间:2023-12-01 00:51:37 24 4
gpt4 key购买 nike

由于某种原因,执行时间仍然与没有线程时相同。

但是,如果我添加类似 time.sleep(secs) 的内容,则目标 def d 内显然有线程在工作。

def d(CurrentPos, polygon, angale, id):

Returnvalue = 0
lock = True
steg = 0.0005
distance = 0
x = 0
y = 0

while lock == True:
x = math.sin(math.radians(angale)) * distance + CurrentPos[0]
y = math.cos(math.radians(angale)) * distance + CurrentPos[1]
Localpoint = Point(x, y)
inout = polygon.contains(Localpoint)
distance = distance + steg
if inout == False:
lock = False

l = LineString([[CurrentPos[0], CurrentPos[1]],[x,y]])
Returnvalue = list(l.intersection(polygon).coords)[0]
Returnvalue = calculateDistance(CurrentPos[0], CurrentPos[1],
Returnvalue[0], Returnvalue[1])

with Arraylock:
ReturnArray.append(Returnvalue)
ReturnArray.append(id)



def Main(CurrentPos, Map):

threads = []
for i in range(8):
t = threading.Thread(target = d, name ='thread{}'.format(i), args =
(CurrentPos, Map, angales[i], i))
threads.append(t)
t.start()
for i in threads:
i.join()

最佳答案

欢迎来到 the Global Interpreter Lock a.k.a. GIL 的世界。您的函数看起来像 CPU 密集型代码(一些计算、循环、if、内存访问等)。抱歉,您无法使用线程来提高 CPU 密集型任务的性能。这是Python 的限制。

Python中有一些释放GIL的函数,例如磁盘 I/O、网络 I/O 以及您实际尝试过的一种: sleep 。事实上,线程确实提高了 I/O 绑定(bind)任务的性能。但算术和/或内存访问不会在 Python 中并行运行。

标准的解决方法是使用进程而不是线程。但这通常很痛苦,因为进程间通信并不那么容易。您可能还需要考虑使用一些低级库,例如 numpy,它们在某些情况下实际上会释放 GIL(您只能在 C 级别执行此操作,GIL 无法从 Python 本身访问)使用其他语言没有这个限制,例如C#、Java、C、C++ 等。

关于python - 为什么程序执行时间和以前一样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56529268/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com