#background-process
#фоновый процесс
Вопрос:
Я новичок в python. Я хочу запустить целую функцию в фоновом режиме (потому что это может занять некоторое время или даже сбой). Вот функция:
def backup(str):
command = barman_bin " backup " str
log_maif.info("Lancement d'un backup full:")
log_maif.info(command)
p = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
output = p.communicate()
if p.returncode == 0:
for line in output[0].decode(encoding='utf-8').split('n'):
log_maif.info(line)
else:
for line in output[0].decode(encoding='utf-8').split('n'):
log_maif.error(line)
log_maif.info("Fin du backup full")
return output
Я хочу запустить эту функцию в фоновом режиме в цикле :
for host in list_hosts_sans_doublon:
backup(host) # <-- how to run the whole function in background ?
В ksh я бы написал что-то вроде backup $host amp;
функции with backup, которая принимает $host в качестве аргумента.
Комментарии:
1. Привет, Эрик. Не эксперт, но я считаю, что то, что вы ищете, — это асинхронный способ запуска функции. Возможно, вы захотите заглянуть в документацию и попытаться найти, как добиться асинхронного поведения.
2. Спасибо xploraj. У меня была попытка с async, но я столкнулся с ошибками типа «SyntaxError: недопустимый синтаксис», которые мне не удалось исправить, вот почему я спрашиваю…
Ответ №1:
То, что вы ищете, — это запустить функцию в другом потоке, насколько я понимаю. Для этого вам нужно использовать модуль потока python. Вот как вы запускаете поток:
import threading
def backup(mystring):
print(mystring)
host="hello"
x = threading.Thread(target=backup, [host])
x.start()
Do what ever you want after this and the thread will run separately.
Комментарии:
1. Спасибо, Фади Абу Рейд. Я подтверждаю, это то, что я ищу. Мне просто нужно было написать x = threading . Поток (цель = резервное копирование, аргументы = (хост,)) и тогда это сработало.