package com.balance.braces;
import java.util.Arrays;
import java.util.Stack;
public class BalanceBraces {
public static void main(String[] args) {
String[] values = { "()]", "[()]" };
String[] rsult = match(values);
Arrays.stream(rsult).forEach(str -> System.out.println(str));
}
static String[] match(String[] values) {
String[] returnString = new String[values.length];
for (int i = 0; i < values.length; i++) {
String value = values[i];
if (value.length() % 2 != 0) {
returnString[i] = "NO";
continue;
} else {
Stack<Character> buffer = new Stack<Character>();
for (char ch : value.toCharArray()) {
if (buffer.isEmpty()) {
buffer.add(ch);
} else {
if (isMatchedBrace(buffer.peek(), ch)) {
buffer.pop();
} else {
buffer.push(ch);
}
}
if (buffer.isEmpty()) {
returnString[i] = "YES";
} else {
returnString[i] = "FALSE";
}
}
}
}
return returnString;
}
static boolean isMatchedBrace(char start, char endmatch) {
if (start == '{')
return endmatch == '}';
if (start == '(')
return endmatch == ')';
if (start == '[')
return endmatch == ']';
return false;
}
}
Я не знаю о модуле multiprocessing , но с модулем subprocess вы можете указать ему не наследовать никакие файловые дескрипторы:
Если close_fds истинно, все файловые дескрипторы, кроме 0, 1 и 2, будут закрыты до выполнения дочернего процесса. (Только для Unix). Или, в Windows, если close_fds истинно, то дескрипторы не будут унаследованы дочерним процессом. Обратите внимание, что в Windows вы не можете установить для close_fds значение true, а также перенаправить стандартные дескрипторы, установив stdin, stdout или stderr.
В качестве альтернативы вы можете закрыть все файловые дескрипторы в дочернем процессе с помощью os.closerange
Закройте все файловые дескрипторы от fd_low (включительно) до fd_high (исключая), игнорируя ошибки. Доступность: Unix, Windows.
После открытия дескриптора файла вы можете использовать функцию SetHandleInformation (). для удаления флага HANDLE_FLAG_INHERIT
.
Метод fileno ()
возвращает номер файла, присвоенный библиотекой времени выполнения. Зная номер файла, вы можете затем вызвать msvcrt.get_osfhandle ()
, чтобы получить дескриптор файла Win32. Используйте этот дескриптор в вызове SetHandleInformation
. Таким образом, может сработать что-то вроде следующего:
win32api.SetHandleInformation(
msvcrt.get_osfhandle(testFile.fileno()),
win32api.HANDLE_FLAG_INHERIT,
0)
Я не уверен в точном использовании модуля win32api
, но это должно помочь преодолеть разрыв между файловым объектом Python и дескриптором Win32.