Я запускаю сценарий резервного копирования, который запускает дочерние процессы для выполнения резервного копирования с помощью rsync. Однако у меня нет возможности ограничить количество rsync, запускаемых одновременно.
Вот код, над которым я работаю в данный момент:
print "active_children: ", multiprocessing.active_children()
print "active_children len: ", len(multiprocessing.active_children())
while len(multiprocessing.active_children()) > 49:
sleep(2)
p = multiprocessing.Process(target=do_backup, args=(shash["NAME"],ip,shash["buTYPE"], ))
jobs.append(p)
p.start()
Это показывает максимум одного ребенка, когда у меня запущены сотни rsync. Вот код, который фактически запускает rsync (изнутри функции do_backup), где command
является переменной, содержащей строку rsync:
print command
subprocess.Popen(command, stdout=subprocess.PIPE, shell=True)
return 1
Если я добавлю sleep(x) к функции do_backup, она будет отображаться как активный дочерний элемент, пока он спит. Кроме того, таблица процессов показывает, что процессы rsync имеют PPID, равный 1. Из этого я предполагаю, что rsync отделяется и больше не является дочерним элементом python, что позволяет моему дочернему процессу умереть, поэтому я больше не могу его считать . Кто-нибудь знает, как сохранить дочерний элемент python живым и учитывать его до завершения rsync?