Ответы
@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
Причина, по которой вы этого не видите, заключается в том, что вы не взаимодействуете с подпроцессом. Вы пытаетесь использовать локальную переменную (локальную для родительского процесса), чтобы сигнализировать дочернему процессу, что он должен выключиться.
Посмотрите информацию о примитивах синхронизации . Вам нужно настроить какой-то сигнал, на который можно ссылаться в обоих процессах. Получив это, вы сможете щелкнуть переключателем в родительском процессе и дождаться смерти дочернего процесса.
Попробуйте ввести следующий код:
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()