Многопроцессорность Python -Не удается присоединиться к текущему потоку

Я работаю над сегментацией больших массивов ctype и их параллельной обработкой. Я получаю приведенную ниже ошибку и верю ей, потому что один сегмент массива завершает обработку раньше другого. Я попытался использовать process.join (), чтобы первый набор процессов ждал, но это не работает. Идеи?

Exception RuntimeError: RuntimeError('cannot join current thread',) in <Finalize object, dead> ignored

Использование:

   ....

        with closing(multiprocessing.Pool(initializer=init(array))) as p:
            del array #Since the array is now stored in a shared array destroy the array ref for memory reasons

            step = y // cores
            if step != 0:
                jobs =[]
                for i in range (0, y, step):
                    process = p.Process(target=stretch, args= (shared_arr,slice(i, i+step)),kwargs=options)
                    jobs.append(process)
                    process.start()

                for j in jobs:
                    j.join()

    del jobs
    del process

Обновление:

 #Create an ctypes array
        array = ArrayConvert.SharedMemArray(array)
        #Create a global of options
        init_options(options) #options is a dict
        with closing(multiprocessing.Pool(initializer=init(array))) as p:
            del array #Since the array is not stored in a shared array destroy the array ref for memory reasons


            step = y // cores
            if step != 0:
                for i in range (0, y, step):
                    #Package all the options into a global dictionary

                    p.map_async(stretch,[slice(i, i+step)])

                    #p.apply_async(stretch,args=(shared_arr,slice(i, i+step)),kwargs=options)

        p.join()        

def init_options(options_):
    global kwoptions
    kwoptions = options_

Функция, которую я передаю асинхронной карте _, хранится в другом модуле, поэтому я изо всех сил пытаюсь передать глобальные kwooptions этой функции. Кажется неправильным передавать глобальные переменные между модулями, как этот (unpythonic ). Это способ передачи kwargs через карту _async.

Должен ли я перерабатывать многопроцессорность, используя что-то другое (apply или Process )?

5
задан Jzl5325 7 August 2012 в 19:20
поделиться