I don't do much python so I might be wrong but to my understanding, this:

    job = job_server.submit(rxx_func, (arg_n,), (), ())

just submits a single job but it doesn't automatically parallelize it. If you want to process the input in parallel you need to submit `n` jobs each working on 1-nth of the input and then combine the results. I think your parallel execution code should look something like this:

    slice_size = len(magn) / ncp;

    # submit a job for each chunk
    jobs = [job_server.submit(rxx_func, (magn,(i-1)*slice_size, slice_size), (), ()) for i in ncp]
    
    # combine the results into one list, requires #import itertools
    rxx = list(itertools.chain.from_iterable([job() for job in jobs]))

You will have to change your `rxx_func` to accept a start index and a count which defines for how many items it is responsible:

    def rxx_func(amp, start_index, count):
        N = len(amp)
        rxx = [0]*count

        for m in xrange(start_index, start_index + count - 1):
            for n in xrange(N-m):
                rxx[m]+=amp[n]*amp[n+m]
        return rxx

I'm sure there is plenty which can be optimized in the above.