Python 尝试在使用多处理时附加到列表
我已经开始使用Python和Netmiko连接到Cisco设备,并将CLI命令刮入数据。这是伟大的工作,但我需要减少脚本所需的时间来完成时,有大量的设备 只要在我使用的函数中打印输出,我就可以让多处理工作正常进行。但是,当我尝试使用具有多处理的共享列表时,它失败了 对于本例,我正在生成一个称为“devices.py”的字典列表,称为“device\u list”: Netmiko模块将使用此词典列表连接到我的测试实验室中的设备 以下是主要节目:Python 尝试在使用多处理时附加到列表,python,python-multiprocessing,Python,Python Multiprocessing,我已经开始使用Python和Netmiko连接到Cisco设备,并将CLI命令刮入数据。这是伟大的工作,但我需要减少脚本所需的时间来完成时,有大量的设备 只要在我使用的函数中打印输出,我就可以让多处理工作正常进行。但是,当我尝试使用具有多处理的共享列表时,它失败了 对于本例,我正在生成一个称为“devices.py”的字典列表,称为“device\u list”: Netmiko模块将使用此词典列表连接到我的测试实验室中的设备 以下是主要节目: import multiprocessing as
import multiprocessing as mp
from time import time
from netmiko import Netmiko
from devices import device_list
def connect_to_dev(output, **device):
net_connect = Netmiko(**device)
show_ver = net_connect.send_command('show version', use_textfsm = True)
net_connect.disconnect()
hostname = show_ver[0]['hostname']
image = show_ver[0]['running_image'][28:62]
result = '{}\nHostname: {}, version {}'.format(line, hostname, image)
output.append(result)
if __name__ == '__main__':
line = '*'*70
start = time()
mgr = mp.Manager()
output = mgr.list()
processes = []
for device in device_list:
p = mp.Process(target=connect_to_dev, args=output, kwargs=device)
processes.append(p)
p.start()
for p in processes:
p.join()
end = time()
runtime = round((end - start), 2)
print(output)
print('{}\nTime elapsed: {} seconds\n{}'.format(line, runtime, line))
我试图获得“connect_to_dev”函数生成的每个“result”,并将其附加到“output”列表中。我得到了这个错误:
Process Process-2:
Traceback (most recent call last):
File "/usr/local/lib/python3.6/multiprocessing/process.py", line 258, in _bootstrap
self.run()
File "/usr/local/lib/python3.6/multiprocessing/process.py", line 93, in run
self._target(*self._args, **self._kwargs)
TypeError: connect_to_dev() missing 1 required positional argument: 'output'
Process Process-3:
Traceback (most recent call last):
File "/usr/local/lib/python3.6/multiprocessing/process.py", line 258, in _bootstrap
self.run()
File "/usr/local/lib/python3.6/multiprocessing/process.py", line 93, in run
self._target(*self._args, **self._kwargs)
Process Process-5:
TypeError: connect_to_dev() missing 1 required positional argument: 'output'
Traceback (most recent call last):
File "/usr/local/lib/python3.6/multiprocessing/process.py", line 258, in _bootstrap
self.run()
File "/usr/local/lib/python3.6/multiprocessing/process.py", line 93, in run
self._target(*self._args, **self._kwargs)
TypeError: connect_to_dev() missing 1 required positional argument: 'output'
Process Process-6:
Traceback (most recent call last):
File "/usr/local/lib/python3.6/multiprocessing/process.py", line 258, in _bootstrap
self.run()
File "/usr/local/lib/python3.6/multiprocessing/process.py", line 93, in run
self._target(*self._args, **self._kwargs)
TypeError: connect_to_dev() missing 1 required positional argument: 'output'
Process Process-4:
Traceback (most recent call last):
File "/usr/local/lib/python3.6/multiprocessing/process.py", line 258, in _bootstrap
self.run()
File "/usr/local/lib/python3.6/multiprocessing/process.py", line 93, in run
self._target(*self._args, **self._kwargs)
TypeError: connect_to_dev() missing 1 required positional argument: 'output'
[]
**********************************************************************
Time elapsed: 0.05 seconds
**********************************************************************
将
args=output
更改为args=(output,)
这太神奇了!这就解决了问题。非常感谢你!将args=output
更改为args=(output,)
这太神奇了!这就解决了问题。非常感谢你!
Process Process-2:
Traceback (most recent call last):
File "/usr/local/lib/python3.6/multiprocessing/process.py", line 258, in _bootstrap
self.run()
File "/usr/local/lib/python3.6/multiprocessing/process.py", line 93, in run
self._target(*self._args, **self._kwargs)
TypeError: connect_to_dev() missing 1 required positional argument: 'output'
Process Process-3:
Traceback (most recent call last):
File "/usr/local/lib/python3.6/multiprocessing/process.py", line 258, in _bootstrap
self.run()
File "/usr/local/lib/python3.6/multiprocessing/process.py", line 93, in run
self._target(*self._args, **self._kwargs)
Process Process-5:
TypeError: connect_to_dev() missing 1 required positional argument: 'output'
Traceback (most recent call last):
File "/usr/local/lib/python3.6/multiprocessing/process.py", line 258, in _bootstrap
self.run()
File "/usr/local/lib/python3.6/multiprocessing/process.py", line 93, in run
self._target(*self._args, **self._kwargs)
TypeError: connect_to_dev() missing 1 required positional argument: 'output'
Process Process-6:
Traceback (most recent call last):
File "/usr/local/lib/python3.6/multiprocessing/process.py", line 258, in _bootstrap
self.run()
File "/usr/local/lib/python3.6/multiprocessing/process.py", line 93, in run
self._target(*self._args, **self._kwargs)
TypeError: connect_to_dev() missing 1 required positional argument: 'output'
Process Process-4:
Traceback (most recent call last):
File "/usr/local/lib/python3.6/multiprocessing/process.py", line 258, in _bootstrap
self.run()
File "/usr/local/lib/python3.6/multiprocessing/process.py", line 93, in run
self._target(*self._args, **self._kwargs)
TypeError: connect_to_dev() missing 1 required positional argument: 'output'
[]
**********************************************************************
Time elapsed: 0.05 seconds
**********************************************************************