Я считаю, что эта функция может удовлетворить вашу потребность, я быстро выбросил ее, поэтому не стесняйтесь немного ее очистить. При выполнении гнезд легко думать об этом назад и работать оттуда =]
def fn(string,endparens=False):
exp = []
idx = -1
for char in string:
if char == "(":
idx += 1
exp.append("")
elif char == ")":
idx -= 1
if idx != -1:
exp[idx] = "(" + exp[idx+1] + ")"
else:
exp[idx] += char
if endparens:
exp = ["("+val+")" for val in exp]
return exp
Еще несколько моментов (Ссылка: Параллелизм Java на практике )
Когда все потоки, не являющиеся демонами, завершаются, JVM останавливается, и все оставшиеся потоки демонов прекращаются :
По этой причине потоки демонов следует использовать с осторожностью, и их опасно использовать для задач, которые могут выполнять какие-либо операции ввода-вывода.
Поток демона - это поток, который не препятствует завершению JVM, когда программа завершается, но поток все еще работает. Примером потока демона является сборка мусора.
Вы можете использовать метод setDaemon (boolean)
для изменения свойств демона Thread
перед запуском потока.
Поток демон - это поток, который считается выполняющим некоторые задачи в фоновом режиме, такие как обработка запросов или различные хронозадания, которые могут существовать в приложении.
Когда в вашей программе останется только поток-демон, она завершится. Это происходит потому, что обычно эти потоки работают вместе с обычными потоками и обеспечивают фоновую обработку событий.
Вы можете указать, что Thread
является daemon, используя метод setDaemon
, они обычно не завершаются, не прерываются... они просто останавливаются, когда приложение останавливается.
Традиционно демонские процессы в UNIX были процессами, которые постоянно выполнялись в фоновом режиме, подобно службам в Windows.
Демонский поток в Java - это поток, который не препятствует выходу JVM. В частности, JVM завершится, когда останутся только потоки-демоны. Вы создаете такой поток, вызывая метод setDaemon()
на Thread
.
Прочитайте статью Daemon threads.