Python 分段故障捕捉

Python 分段故障捕捉,python,segmentation-fault,signals,multiprocessing,maya,Python,Segmentation Fault,Signals,Multiprocessing,Maya,我有一个python脚本,它将循环遍历大量maya文件并执行一些操作。但有一段时间maya会出现seg错误,我的脚本将停止在那里。我尝试了信号和多进程。但两者都失败了 import os, optparse, glob, json, signal import maya.standalone import maya.cmds as cmds from multiprocessing import Process, Queue def loadMayaBd(): maya.standal

我有一个python脚本,它将循环遍历大量maya文件并执行一些操作。但有一段时间maya会出现seg错误,我的脚本将停止在那里。我尝试了信号和多进程。但两者都失败了

import os, optparse, glob, json, signal
import maya.standalone
import maya.cmds as cmds
from multiprocessing import Process, Queue

def loadMayaBd():
    maya.standalone.initialize(name='python')

def sig_handler(signum, frame):
    print "segfault"

def doSome(args, options):
    signal.signal(signal.SIGSEGV, sig_handler)
    loadMayaBd()
    #from here its just a example
    fileNameList = args[0]
    for eachFile in fileNameList:
        #this is throwing the seg fault
        #I want continue my for llop even if there is any segfault
        #I don't want to exit python coz of that segfault
        cmds.file(eachFile, force = 1, open = 1)

if __name__ == "__main__":
    usage = "usage: %prog [options] args(file list)"
    parser = optparse.OptionParser(usage)
    parser.add_option("-l", "--log", dest="log",
                  help="Log File Path", metavar="LOG_FILE")
    parser.add_option("-v", "--verbose", dest="verbose",
                  help="Print All Logs", metavar="VERBOSE", default=False, action='store_true')
    (options, args) = parser.parse_args()
    if len(args) <= 0:
        errorMsg = "You must pass file path list for crawling"
        raise RuntimeError(errorMsg)
    p = Process(target=doSome, args=(args, options))
    p.start()
    p.join()
导入操作系统、optpass、glob、json、信号
导入maya.standalone
将maya.cmds作为cmds导入
从多处理导入进程,队列
def loadMayaBd():
maya.standalone.initialize(name='python')
def信号处理器(信号、帧):
打印“segfault”
def doSome(参数、选项):
signal.signal(signal.SIGSEGV,sig_处理器)
loadMayaBd()
#这只是一个例子
fileNameList=args[0]
对于文件名列表中的每个文件:
#这就是seg故障
#我想继续我的llop,即使有任何错误
#我不想退出python,因为这是一个错误
cmds.file(每个文件,force=1,open=1)
如果名称=“\uuuuu main\uuuuuuuu”:
用法=“用法:%prog[options]参数(文件列表)”
parser=optparse.OptionParser(用法)
parser.add_选项(“-l”,“--log”,dest=“log”,
help=“日志文件路径”,metavar=“日志文件”)
parser.add_选项(“-v”,“--verbose”,dest=“verbose”,
help=“打印所有日志”,metavar=“详细”,default=False,action='store\u true')
(options,args)=parser.parse_args()
如果len(args)这对我有效:

导入操作系统
输入信号
def信号处理器(信号、帧):
打印(“segfault”)
signal.signal(signal.SIGSEGV,sig_处理器)
kill(os.getpid(),signal.SIGSEGV)
尽管如此:
通过

您确定在生成的每个进程中都捕获了segfault吗?

问题已编辑。不,我不这么认为,我正在捕获每个进程:(将
signal.signal(signal.SIGSEGV,sig_handler)
移动到startCrawling方法内部。看起来你并不是在每个进程上设置陷阱。谢谢你,检查一下,这需要一些时间:)。我会更新you@achayan进展如何?我被困在一个类似的问题上。