Возможно ли выполнить несколько команд beeline из python с помощью подпроцесса и захватить выходные данные каждого запроса

#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:

Если это нужно делать параллельно, а не последовательно, вы можете посмотреть на потоки. Без многопоточности я бы предположил, что вы застряли, выполняя это процедурно.

Эта страница может помочь.