python-3.x - 在地图中添加修复参数 - Python
问题描述
我正在尝试迭代一个方法并传递该方法需要的其他参数。为此,我认为我最好的方法是使用 map() 方法。
更准确地说,我需要在几个 FQDN(完全合格的域名,即:www.mywebsite.com)上执行几个 dns 请求(A / AAAA / NS / MX)。
由于请求可以等待几秒钟等待答案,我正在使用线程来补偿。
这是我的实际代码:
with ThreadPoolExecutor(max_workers=4) as executor:
for fqdn in fqdn_list:
future_01 = executor.submit(get_dns_query, fqdn, 'A')
future_02 = executor.submit(get_dns_query, fqdn, 'AAAA')
ip = future_01.result()
ipv6 = future_02.result()
现在我认为最好的是:
with ThreadPoolExecutor(max_workers=4) as executor:
ip = executor.map(get_dns_query, fqdn, 'A')
ipv6 = executor.submit(get_dns_query, fqdn, 'AAAA')
get_dns_query将执行 dns 请求并需要FQDN和RDTYPE (A / AAAA / NS / MX)
我希望map()在FQDN上进行迭代,并且我还希望能够将RDTYPE作为普通参数传递。
到目前为止,我明白这不是地图的目的。但似乎存在解决方案: Functools 或 Itertools 解决方案
不幸的是,我无法理解它们以及它们是否适用于我的情况。
有任何想法吗?
解决方案
我认为这个解决方案可以为你工作:
import functools
fqdn_list = ['www.google.com', 'www.facebook.com']
with ThreadPoolExecutor(max_workers=4) as executor:
ips = executor.map(functools.partial(get_dns_query, rdtype_freezed_arg='A'), fqdn_list)
ipsv6 = executor.map(functools.partial(get_dns_query, rdtype_freezed_arg='AAAA'), fqdn_list)
## SOME CODE
for ip in ips:
print(ip)
for ipv6 in ipv6s:
print(ipv6)
我所做的是:我想象的 get_dns_query 函数的“冻结”部分需要 2 个参数
def get_dns_query(rdtype, fqdn):
# lines of code
将其映射到动态 args 'fqdn_list' 列表中,所以它的行为如下:
get_dns_query(rdtype_freezed_arg='A', fqdn_list[0])
get_dns_query(rdtype_freezed_arg='A', fqdn_list[1])
# and so on ...
然后我在生成器 ips 和 ipv6s 上收集结果(n 个结果,由 fqdn_list.size() 定义)
最后我遍历它们。
观察:我没有测试它。
编辑:出于教学目的,我使用 'rdtype_freezed_arg' 作为 arg 名称,您应该使用函数声明中使用的 arg 名称。
推荐阅读
- python - 如何检查Python中的for循环是否被中断
- ios - 如何为按钮设置动画以向右显示视图并在点击时弹回
- python - 在linux中将csv文件加载到数据库中
- css - 从另一个css文件导入样式元素时如何排除样式元素
- javascript - 当将 elasticsearch 与 d3.js 集成时,“未捕获的类型错误:无法读取未定义的属性‘客户端’”我收到此错误
- postgresql - 我应该给 Flyway 哪些 Postgres 特权?
- php - PDO对象的最佳利用
- angular - 2个时间间隔之间的mongodb聚合
- c# - 如何使用 C# Web 应用程序使用和重定向 JWT 令牌 URL \login\login.php?token=jwt.goes.here
- bash - 如何在 awk 命令中读取和使用文本文件值(逗号分隔或行分隔)