Запуск нескольких команд одновременно из Python - PullRequest
3 голосов
/ 28 октября 2009

Я хочу запустить три команды одновременно из python. Формат команды: query.pl -args

В настоящее время я делаю

os.system("query.pl -results '10000' -serverName 'server1' >> log1.txt")

os.system("query.pl -results '10000' -serverName 'server2' >> log2.txt")

os.system("query.pl -results '10000' -serverName 'server3' >> log3.txt")

Я хочу запросить все три сервера одновременно, но в этом случае каждая команда выполняется только после завершения последнего. Как я могу сделать их одновременно? Я думал об использовании '&' в конце, но я хочу, чтобы следующая часть кода запускалась только тогда, когда все три команды закончили

Ответы [ 3 ]

10 голосов
/ 28 октября 2009

Вы можете использовать модуль подпроцесс , и все три будут работать независимо: используйте подпроцесс. Откройте. Будьте внимательны при правильной настройке параметра «shell».

Используйте метод wait () или poll (), чтобы определить, когда подпроцессы завершены.

0 голосов
/ 28 октября 2009

Вы можете использовать Очередь

tasks = ("query.pl -results '10000' -serverName 'server1'",\
"query.pl -results '10000' -serverName 'server2'",\
"query.pl -results '10000' -serverName 'server1'")

def worker():
    while True:
        item = q.get()
        os.system(item)

q = Queue()
for i in tasks:
     t = Thread(target=worker)
     t.setDaemon(True)
     t.start()

for item in tasks:
    q.put(item)

q.join()   
0 голосов
/ 28 октября 2009
os.system("query.pl -results '10000' -serverName 'server1' &") 
os.system("query.pl -results '10000' -serverName 'server2' &") 
os.system("query.pl -results '10000' -serverName 'server3' &")

в этом случае - процесс будет запущен в фоновом режиме

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...