Exemplo n.º 1
0
def call_in_subprocess(func, *args, **kwargs):
    from infi.storagemodel.base.gevent_wrapper import start_process, get_pipe_context
    pipe_context = get_pipe_context()
    with pipe_context as (reader, writer):
        logger.debug("{} calling {}(args={!r}, kwargs={!r}) on with multiprocessing".format(getpid(), func, args, kwargs))
        subprocess = start_process(put_result_in_queue(func), writer, *args, **kwargs)
        logger.debug("{} multiprocessing pid is {}".format(getpid(), subprocess.pid))
        return_value = read_from_queue(reader, subprocess)
        logger.debug("{} multiprocessing {} returned {!r}".format(getpid(), subprocess.pid, return_value))
        ensure_subprocess_dead(subprocess)
    return return_value
Exemplo n.º 2
0
def do_scsi_cdb(sg_device, cdb):
    from infi.storagemodel.base.gevent_wrapper import start_process, get_pipe_context
    pipe_context = get_pipe_context()
    with pipe_context as (reader, writer):
        logger.debug("{} issuing cdb {!r} on {} with multiprocessing".format(getpid(), cdb, sg_device))
        subprocess = start_process(do_scsi_cdb_with_in_process, writer, sg_device, cdb)
        logger.debug("{} multiprocessing pid is {}".format(getpid(), subprocess.pid))
        return_value = read_from_queue(reader, subprocess)
        logger.debug("{} multiprocessing {} returned {!r}".format(getpid(), subprocess.pid, return_value))
        ensure_subprocess_dead(subprocess)
    if isinstance(return_value, ScsiCheckConditionError):
        raise ScsiCheckConditionError(return_value.sense_key, return_value.code_name)
    if isinstance(return_value, ScsiCommandFailed):
        raise ScsiCommandFailed()
    return return_value