gpt4 book ai didi

Python:线程+锁大大减慢了我的应用程序

转载 作者:太空狗 更新时间:2023-10-30 00:52:08 25 4
gpt4 key购买 nike

假设我有一个写入文件的函数。我还有一个循环重复读取所述文件的功能。我让这两个函数在不同的线程中运行。 (实际上我正在通过 MDIO 读/写寄存器,这就是为什么我不能让两个线程同时执行,只有一个或另一个,但为了简单起见,我们只说它是一个文件)

现在,当我单独运行写入函数时,它执行得相当快。但是,当我运行线程并让它在运行前获取锁时,它似乎运行得非常慢。这是因为第二个线程(读取函数)正在轮询获取锁吗?有什么办法可以解决这个问题吗?

我目前只使用一个简单的 RLock,但我愿意接受任何可以提高性能的更改。

编辑:举个例子,我将举一个基本的例子来说明正在发生的事情。读取线程基本上一直在运行,但偶尔会有单独的线程调用加载。如果我通过从 cmd 提示符运行加载进行基准测试,在线程中运行至少慢 3 倍。

写线程:

import usbmpc # functions I made which access dll functions for hardware, etc

def load(self, lock):
lock.acquire()
f = open('file.txt','r')
data = f.readlines()
for x in data:
usbmpc.write(x)
lock.release()

阅读主题:

import usbmpc

def read(self, lock):
addr = START_ADDR
while True:
lock.acquire()
data = usbmpc.read(addr)
lock.release()
addr += 4
if addr > BUF_SIZE: addr = START_ADDR

最佳答案

你在多核机器上使用线程吗?

如果答案是肯定的,那么除非您的 Python 版本是 3.2+,否则您在运行线程应用程序时会遇到性能下降的问题。

David Beazly已经付出了相当大的努力来找出 GIL 在多核上发生了什么,并使我们其他人也很容易理解它。查看他的网站和那里的资源。你也可能想看看他的 presentation在 PyCon 2010。这很有趣。

长话短说,在 Python 3.2 中,Antoine Pitrou wrote a new GIL在单核和多核机器上具有相同的性能。在以前的版本中,你拥有的核心/线程越多,性能损失就越大......

希望对你有帮助:)

关于Python:线程+锁大大减慢了我的应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5426533/

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