【问题标题】:Segmentation Fault Catch分段错误捕获
【发布时间】:2014-10-30 17:36:18
【问题描述】:

我有一个 python 脚本,它会遍历一堆 maya 文件并做一些事情。但是有时玛雅会出现段错误,我的脚本会停在那里。我试过signalmultiprocess。但都失败了。

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()

有没有其他方法可以捕获 seg fault 并继续下一步?

【问题讨论】:

标签: python segmentation-fault signals multiprocessing maya


【解决方案1】:

这对我有用:

import os
import signal


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


signal.signal(signal.SIGSEGV, sig_handler)

os.kill(os.getpid(), signal.SIGSEGV)

while True:
    pass

您确定要在生成的每个进程中捕获段错误吗?

【讨论】:

  • 问题已编辑。不,我不这么认为,我正在捕捉每个过程:(
  • signal.signal(signal.SIGSEGV, sig_handler) 移动到您的 startCrawling 方法中。看起来您并没有在每个进程上设置陷阱。
  • 谢谢,检查一下,这需要一些时间:)。我会更新你
  • @achayan 进展如何?我遇到了类似的问题。
猜你喜欢
  • 2012-10-10
  • 2019-04-02
  • 1970-01-01
  • 2021-11-15
  • 2010-10-05
  • 2018-07-13
  • 2014-07-20
  • 1970-01-01
相关资源
最近更新 更多