Выход из многопроцессорного Python Элегантно Как?

Ответы

@ck и @Marlon Tarak являются единственными, кто использует char[], который для приложений, которые имеют несколько вызовов для методов заполнения в второй - лучший подход. Тем не менее, они не используют преимущества любых оптимизаций манипуляции с массивами и немного переписаны для моего вкуса;

public static String pad(String source, char fill, int length, boolean right){
    if(source.length() > length) return source;
    char[] out = new char[length];
    if(right){
        System.arraycopy(source.toCharArray(), 0, out, 0, source.length());
        Arrays.fill(out, source.length(), length, fill);
    }else{
        int sourceOffset = length - source.length();
        System.arraycopy(source.toCharArray(), 0, out, sourceOffset, source.length());
        Arrays.fill(out, 0, sourceOffset, fill);
    }
    return new String(out);
}

Простой метод тестирования:

public static void main(String... args){
    System.out.println("012345678901234567890123456789");
    System.out.println(pad("cats", ' ', 30, true));
    System.out.println(pad("cats", ' ', 30, false));
    System.out.println(pad("cats", ' ', 20, false));
    System.out.println(pad("cats", '$', 30, true));
    System.out.println(pad("too long for your own good, buddy", '#', 30, true));
}

Выходы:

012345678901234567890123456789
cats                          
                          cats
                cats
cats$$$$$$$$$$$$$$$$$$$$$$$$$$
too long for your own good, buddy 

42
задан Matt Seymour 10 December 2014 в 09:51
поделиться

1 ответ

Причина, по которой вы этого не видите, заключается в том, что вы не взаимодействуете с подпроцессом. Вы пытаетесь использовать локальную переменную (локальную для родительского процесса), чтобы сигнализировать дочернему процессу, что он должен выключиться.

Посмотрите информацию о примитивах синхронизации . Вам нужно настроить какой-то сигнал, на который можно ссылаться в обоих процессах. Получив это, вы сможете щелкнуть переключателем в родительском процессе и дождаться смерти дочернего процесса.

Попробуйте ввести следующий код:

import multiprocessing
import time

class MyProcess(multiprocessing.Process):

    def __init__(self, ):
        multiprocessing.Process.__init__(self)
        self.exit = multiprocessing.Event()

    def run(self):
        while not self.exit.is_set():
            pass
        print "You exited!"

    def shutdown(self):
        print "Shutdown initiated"
        self.exit.set()


if __name__ == "__main__":
    process = MyProcess()
    process.start()
    print "Waiting for a while"
    time.sleep(3)
    process.shutdown()
    time.sleep(3)
    print "Child process state: %d" % process.is_alive()
47
ответ дан 26 November 2019 в 21:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: