如何知道导入模块期间 Python 中写入的内容?
How to know what is being written in Python during import module?
我的一个 Ubuntu 很奇怪,当我导入模块时,对于一个模块 pandas,它需要随机时间(从 0.9 到 160 秒)才能完成。
我不确定是什么导致了问题,但我发现在模块加载期间 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 相关的库之一导致了这个问题。但我不知道为什么只有 pandas 受到影响。
谢谢大家,我找到了解决方法:先导入 pandas。
使用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 +++
这应该显示正在打开和写入的文件,以及每个事件的时间。
我的一个 Ubuntu 很奇怪,当我导入模块时,对于一个模块 pandas,它需要随机时间(从 0.9 到 160 秒)才能完成。
我不确定是什么导致了问题,但我发现在模块加载期间 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 相关的库之一导致了这个问题。但我不知道为什么只有 pandas 受到影响。
谢谢大家,我找到了解决方法:先导入 pandas。
使用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 +++
这应该显示正在打开和写入的文件,以及每个事件的时间。