我是python多线程的绝对初学者。我的应用程序需要telnet大约200台服务器,执行命令并返回响应。我已经为telnetting和处理响应创建了单独的类。我读过线程中的GIL和竞赛条件,但不确定它们是否会对我的代码产生影响。因为对于每个线程,我都会创建一个新的类实例并访问该方法。所以从技术上讲,线程不会共享相同的资源。有人能解释一下我的假设是否正确吗?如果不正确,请解释一下正确的方法?
主要方法:
if __name__ == "__main__":
thread_list = []
for ip in server_list: # server list contains the IP of hosts
config_object = Configuration () # configuration class has method for telnet device
thread1 = threading.Thread(target=config_object.captureconfigprocess, args=(ip))
thread_list.append(thread1)
for thread in thread_list:
thread.start()
for thread in thread_list:
thread.join()
我读过线程中的GIL和竞争条件,但不确定它们是否会对我的代码产生影响
Python没有真正的线程。操作系统将所有python线程视为一个进程,这将需要CPU在python发送的指令之间进行上下文切换。这将削弱代码的性能。尽管python线程在大多数情况下都绰绰有余,但对于您的情况来说,它可能不够,也可能不够。200台服务器可能看起来太多了,但归根结底是这200台服务器和您的python客户端之间的通信量。可以肯定的是,你必须尝试。如果您想要更好的解决方案,请使用多处理。
因此,从技术上讲,线程不会共享相同的资源。
如果每个线程都在使用自己的资源,那么共享资源就不用担心了。