什么是Python';s";内置方法acquire";?我怎样才能加快速度?

什么是Python';s";内置方法acquire";?我怎样才能加快速度?,python,optimization,profiling,performance,Python,Optimization,Profiling,Performance,我正在编写一个具有大量文件访问权限的Python程序。它运行的速度惊人地慢,所以我使用cProfile来找出花费时间的原因 Python报告为“{build-in-method acquire}”的内容似乎花费了很多时间。我不知道这个方法是什么。这是什么?我如何提高程序的速度?如果看不到您的代码,很难猜测。但我猜这就是方法。您的部分代码正在尝试获取线程锁,并且正在等待,直到获得它为止 可能有一些简单的方法可以通过 重新构造文件访问权限 不锁, 使用blocking=False 甚至根本不使用线

我正在编写一个具有大量文件访问权限的Python程序。它运行的速度惊人地慢,所以我使用cProfile来找出花费时间的原因


Python报告为“{build-in-method acquire}”的内容似乎花费了很多时间。我不知道这个方法是什么。这是什么?我如何提高程序的速度?

如果看不到您的代码,很难猜测。但我猜这就是方法。您的部分代码正在尝试获取线程锁,并且正在等待,直到获得它为止

可能有一些简单的方法可以通过

  • 重新构造文件访问权限
  • 不锁,
  • 使用blocking=False
  • 甚至根本不使用线程

但同样,如果没有看到您的代码,很难猜测。

使用线程进行IO是个坏主意。线程化不会使程序等待得更快。通过使用异步I/O和事件循环,可以获得更好的结果;发布更多关于您的程序的信息,以及为什么要使用线程。

您希望查找所使用的cpu,而不是该方法中的“使用的总时间”——这可能会有所帮助。很抱歉,我没有使用python,但ruby对我来说就是这样:)
-r

这不是threading.Lock.acquire方法。原来是threading.Condition.acquire方法。不幸的是,在配置文件输出中似乎没有任何方法来区分它们。这两种情况表示类似的情况。我使用线程是因为我有一个缓慢的网络读取操作正在进行,我需要在数据加载后对其进行一些处理。在当前的设计中,我可以加载两个数据集,在每个数据集上生成一个合并键,然后合并并保存它们。也许事件循环更好,但我对此表示怀疑。-1,在python中,线程化多个I/O操作可能是有益的,因为每个线程在等待操作系统处理请求时都会释放GIL。@David:这比使用异步I/O有多大好处?