#python #python-3.x #multithreading #subprocess #beeline
Вопрос:
Как я могу выполнить несколько команд beeline из python с помощью подпроцесса и получить результат каждого запроса? Я могу последовательно выполнить приведенный ниже код, но он не выполняется параллельно. Кроме того, если первая команда по какой-либо причине завершается неудачно, вторая не выполняется. Я хотел бы выполнить один и тот же запрос на нескольких серверах одновременно и получить результат. Какая-нибудь помощь в этом деле?
import subprocess
url = ['host1','host2','host3','host4',...'host10']
child_processes = []
for i in url:
jdbc_string ="jdbc:hive2://" i ":1000/;ssl=true"
beeline_cmd = ['beeline','-u',jdbc_string,'-n',userid,'-p',password,'-e','"select count(*) from DB.TABLENAME;"']
p = subprocess.Popen(beeline_cmd, stdout=subprocess.PIPE,stderr=subprocess.PIPE)
child_processes.append(p)
for j in child_processes:
j.wait()
for j in child_processes:
j.communicate()
Ответ №1:
Если это нужно делать параллельно, а не последовательно, вы можете посмотреть на потоки. Без многопоточности я бы предположил, что вы застряли, выполняя это процедурно.