Как запустить многопоточность для функции внутри функции - Python - PullRequest
0 голосов
/ 06 июня 2019

Python начинающий !!

from threading import Thread
from time import sleep

devices = ['1.1.1.1','2.2.2.2']

def conn(device):
    connect = ConnectHandler(device_type='cisco_ios', 
                             username='kiran', ip=device, password='ciscossh',secret='ciscoen')
    print 'connection successful'
    def commmand():
        value = connect.send('sh int ip brief')
        print value

for device in devices:
   thread = Thread(target = conn, args = (device, ))
   thread.start()
   thread.join()
   print("thread finished...exiting")

вывод:

соединение установлено

поток завершен ... выход

соединение установлено

поток завершен ... выход

Проблема: не читается вторая команда функции (), требуется ли вызывать вторую функцию, которая находится внутри первой?

Ответы [ 2 ]

0 голосов
/ 06 июня 2019

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

- Даже если вы определяете метод command(), он не вызывается явно, поэтому его ответ определенно не должен быть распечатан.

- Работа ваших потоков сейчас очень синхронна. Когда вы используете join(), он блокирует выполнение потока до тех пор, пока он не завершится, и, поскольку у вас нет других потоков, инициализированных одновременно, выполнение вашего кода все еще остается простым. Если это соответствует вашим интересам, вы можете рассмотреть возможность запуска всех потоков, а затем присоединить их после для цикла .

- Сетевые соединения иногда требуют независимых основных ресурсов и имеют отдельные требования к процессору или памяти. В этом случае вы можете захотеть изучить многопроцессорный модуль Python вместо *1021* threading .

- Если вы заинтересованы в запуске нескольких потоков | процессов, каждый для каждой итерации ( для цикла), вы можете рассмотреть возможность использования Pool объектов, которые делают несколько темы доступны для вас в одной структуре данных.

Надеюсь, это поможет.

0 голосов
/ 06 июня 2019

Это равно чтение command() и построение функции.Вы просто никогда не используете эту функцию после ее определения.Я предлагаю вам просмотреть функции в python

Ваш код должен быть скорректирован:

def conn(device):
    connect = ConnectHandler(device_type='cisco_ios', 
                             username='kiran', ip=device, password='ciscossh',secret='ciscoen')
    print 'connection successful'
    def commmand():
        value = connect.send('sh int ip brief')
        print value
    command() # call your function!!! otherwise it is useless...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...