【问题标题】:How to know what is being written in Python during import module?如何知道在导入模块期间用 Python 编写了什么?
【发布时间】:2016-11-18 02:27:17
【问题描述】:

当我导入模块时,在我的一个 Ubuntu 上很奇怪,对于一个模块 pandas,它需要随机时间(从 0.9 到 160s )才能完成。

我不确定是什么导致了问题,但我发现在模块加载期间 python 正在使用 IOW/s= 2M 向磁盘写入一些内容。

所以我的问题是:

有没有办法跟踪 Python 在执行期间写入的文件?

Python 2.7、Cuda 8.0 RC、cuDnn 5.1、Theano 9.0-dev、keras、pandas 0.18.1


跟踪后我发现 python 正在写入 /home/username/.nv/ComputeCache ,因此可能是与 GPU 相关的库之一导致了这个问题。但我不知道为什么只有熊猫受到影响。


谢谢大家,我找到了解决方法:先导入熊猫。

【问题讨论】:

  • 也许您可以在此处专门放置显示导入的代码?因为您突然在最后提到“模型加载”和“Theano”和“Keras”,这表明您的问题可能更具体到您的特定代码,而不是问题标题所暗示的一般“导入模块期间”。
  • @justhalf 感谢您指出这一点,我确实有一个用于测试“导入”的小脚本,但我无法重现我的问题。但是当我运行我的程序时,这个问题一直出现(不是测试重启后发生的情况),所以我想知道正在写什么。
  • 我明白了。然后,如果您真的想检查正在编写的内容并且您认为这对将来的参考也很有用,我想您应该重新表述问题以关注该部分,而不是加载的随机时间。此外,正文中的问题可以更新为“那么有没有办法跟踪 Python 在执行期间写入的文件?”更一般。 (目前您有“在模型加载期间”,这与问题无关。

标签: python pandas cuda theano keras


【解决方案1】:

使用strace 跟踪系统调用。

$ strace -ttt -feopen,write -o log python -c 'open("foo", "w").write("blah")'
$ cat log
...
122157 1468546777.800508 open("foo", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3
122157 1468546777.800733 write(3, "blah", 4) = 4
122157 1468546777.804145 +++ exited with 0 +++

这应该显示正在打开和写入哪些文件,以及每个事件的时间。

【讨论】:

  • 谢谢,在跟踪后我发现 python 正在写入 /home/username/.nv/ComputeCache ,所以可能是与 GPU 相关的库之一导致了这个问题。
  • 您可以通过在导入 GPU 库之前执行 os.environ['CUDA_CACHE_DISABLE']='1' 来防止这种情况。更多细节在这里:docs.nvidia.com/cuda/cuda-c-programming-guide/…
猜你喜欢
  • 1970-01-01
  • 2019-12-12
  • 1970-01-01
  • 2021-11-23
  • 2019-06-15
  • 2018-01-22
  • 2022-12-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多