python-3.x - Python - 使用类的多线程
问题描述
我是 python 多线程的绝对初学者。我的应用程序需要远程登录大约 200 台服务器,执行命令并返回响应。我为远程登录和处理响应创建了单独的类。我阅读了有关线程中的 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 客户端之间发生了多少通信。可以肯定的是,你必须尝试。如果您想要更好的解决方案,请使用multiprocessing。
所以从技术上讲,线程不会共享相同的资源。
如果每个线程都使用它自己的资源,那么共享资源就不是值得担心的问题。
推荐阅读
- ruby-on-rails - Rails - 为模型添加额外的列或创建额外的关联(表)?
- java - 在 Java 中使用 Scanner 函数的意外行为
- apache-kafka - KSQL Table-Table Left outer Join 多次发出相同的连接结果
- java - 迁移到 Androidx 后无法解析方法 setAdapter
- python - pandas groupby 根据条件计数
- c - 为什么这段代码最后会打印垃圾?为什么 strlen 返回不正确的值?
- node.js - 如何防止我的 Node js 代码被盗?
- php - Laravel - 会话似乎只保存了第二次
- nginx - 如何创建排除以特定字符串开头的任何 URL 路径的 auth_basic nginx 配置?
- bash - 拆分 PDF(子分组页面)