PermissionError:该进程无法访问文件,因为正在被另一个进程使用:'C:\\Users\\\\AppData\\Local\\Temp\\scipy-36p0uzzx'

PermissionError:该进程无法访问文件,因为正在被另一个进程使用:'C:\\Users\\\\AppData\\Local\\Temp\\scipy-36p0uzzx'

我正在使用一个开源程序,该程序按顺序运行数千个操作,“scipy”是正在使用的库之一。在某个随机迭代中,我得到了这个错误,进程终止了,让我发现我想在一夜之间运行的进程没有运行。

但这毫无意义。这个文件是如何阻止自己的?我有 Windows 11、Windows Defender、Malwarebytes Anti-exploit……我不知道哪个可能导致了这个问题。这些文件确实是临时的,因为当我在崩溃后去寻找它们时,它们甚至不在那里,所以根本无法知道是什么在使用它们。

如果我查看临时文件夹,我可以看到具有该命名约定的文件以未知的时间间隔出现和消失。当它出现时,它几乎立即再次消失。

答案1

Windows 允许应用程序多线程。这意味着单个应用程序可以生成多个线程。因此,当您说“在某个随机迭代中,我收到此错误”时,这意味着一个线程正在阻塞另一个线程,占用所需的资源,即scipy-36p0uzzx.这被称为线程争用

通常情况下,一个编写良好的多线程应用程序会使用一种方法来指示某个资源正在使用中,例如互斥锁,以避免争用。

如果您使用的应用程序由于争用而失败,请尝试限制线程数。

  • 如果应用程序具有这样的设置,可能在.ini 文件中,将其设置为单线程。
  • 如果是解释例如,在 Java 中运行的应用程序,可能可以指示引擎限制线程数。
  • 您可以尝试限制CPU 核心该过程使用通过设置亲和力
  • 联系应用程序开发人员寻求帮助。我的经验是,开源项目的开发人员响应更快对用户请求的响应比商业应用程序的响应更迅速。

相关内容