我正在Freeswitch之上开发Python 2.7,但需要一些Python3代码进行音频分类(使用Tensorflow和Librosa进行特征提取的机器学习)。
当我以root用户身份从命令行运行Python3脚本时,它会按预期运行。
当从子进程(从python 2.7执行)调用脚本时,它会发生段错误。 Python正在执行的用户与命令行不同,因此我按以下方式执行命令以确保从同一用户执行(具有完整的sudo权限):
cmd = 'echo $PASSWORD| sudo -u root -S python3 -Xfaulthandler /usr/share/freeswitch/class/train.py '+str(uuid2)
p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, close_fds=True)
output = p.stdout.read()
输出:
NG:tensorflow:From /usr/local/lib/python3.5/dist-packages/tensorflow/python/framework/op_def_library.py:263: colocate_with (from tensorflow.python.framework.ops) is deprecated and will be removed in a future version.
Instructions for updating:
Colocations handled automatically by placer.
WARNING:tensorflow:From /usr/local/lib/python3.5/dist-packages/keras/backend/tensorflow_backend.py:3445: calling dropout (from tensorflow.python.ops.nn_ops) with keep_prob is deprecated and will be removed in a future version.
Instructions for updating:
Please use `rate` instead of `keep_prob`. Rate should be set to `rate = 1 - keep_prob`.
2019-06-05 05:41:43.715213: I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
2019-06-05 05:41:43.720328: I tensorflow/core/platform/profile_utils/cpu_utils.cc:94] CPU Frequency: 1999995000 Hz
2019-06-05 05:41:43.720756: I tensorflow/compiler/xla/service/service.cc:150] XLA service 0x559fd3827ad0 executing computations on platform Host. Devices:
2019-06-05 05:41:43.720778: I tensorflow/compiler/xla/service/service.cc:158] StreamExecutor device (0): <undefined>, <undefined>
WARNING:tensorflow:From /usr/local/lib/python3.5/dist-packages/tensorflow/python/ops/math_ops.py:3066: to_int32 (from tensorflow.python.ops.math_ops) is deprecated and will be removed in a future version.
Instructions for updating:
Use tf.cast instead.
Fatal Python error: Segmentation fault
Current thread 0x00007fae74f76700 (most recent call first):
File "/usr/local/lib/python3.5/dist-packages/librosa/feature/spectral.py", line 1536 in melspectrogram
File "/usr/local/lib/python3.5/dist-packages/librosa/feature/spectral.py", line 1442 in mfcc
File "/usr/local/lib/python3.5/dist-packages/pyaudioclassification/feat_extract.py", line 20 in extract_feature
File "/usr/local/lib/python3.5/dist-packages/pyaudioclassification/feat_extract.py", line 56 in get_ext_features
File "/usr/local/lib/python3.5/dist-packages/pyaudioclassification/feat_extract.py", line 68 in parse_audio_file
File "/usr/local/lib/python3.5/dist-packages/pyaudioclassification/__init__.py", line 61 in predict
File "/usr/share/freeswitch/class/train.py", line 36 in classify
File "/usr/share/freeswitch/class/train.py", line 42 in <module>
Segmentation fault
我已经检查了输入音频文件(777)的文件权限
Stress在另一个TTY上运行train.py时测试了Freeswitch 终端(按预期方式工作,因此不会出现内存问题)
检查了ulimit -a(此处与CLI / 子过程相比有所不同:
子进程ulimit -a:
'无限 文件(块)无限 数据(千字节)无限 堆栈(KB)240 coredump(块)无限 内存(千字节)无限 锁定内存(千字节)64 过程无限 无文件999999 vmemory(kbytes)无限 无限锁定 rtprio无限'
来自终端的命令:
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 64117
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 64117
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
我很想在这里寻找答案,我已经没有足够的尝试机会了。