我刚刚开始理解python中类的概念,我希望改善自己的脚本。基本上,我的脚本使用请求库检查各种URL的状态,并对接收到的数据进行其他后期处理。目前,我的脚本充满了功能,并且将相同的参数传递给每个功能。我面临的问题是我正在使用并发。未来多线程,但不确定如何使用它来调用类而不是函数。
我只是在下面做一个简单的测试,以便能够在处理后从类中检索字典。但是,它给我返回了一个类对象,我无法弄清楚如何从该类对象中提取数据。
我班的目的是我想使用它来获取每个URL的状态并进行一些后期处理并返回字典。
from concurrent.futures import ThreadPoolExecutor
class capture_screenshot(object):
def __init__(self, customer_data):
self.customer_data = customer_data
def __call__(self):
return self.customer_data
url_dict = {"url_0": "https://redacted.com/a", "url_1": "https://redacted.com/b", ...}
with ThreadPoolExecutor(max_workers=16) as executor:
processed_results = list(executor.map(capture_screenshot, url_dict))
print(processed_results) # This should be "https://redacted.com/a but I am getting a class object
processed_results : [<capture_screenshot object at 0x0000020443...>, <capture_screenshot object at 0x0000020443...>]
非常感谢。
我认为processed_results = list(executor.map(capture_screenshot, url_dict))
只是初始化对象(调用__init__
方法)。这就是为什么您收到对象。
我认为您还需要在初始化后执行对象。尝试这样的事情:
with ThreadPoolExecutor(max_workers=16) as executor:
processed_results = list(executor.map(capture_screenshot, url_dict.items()))
results = [executor.submit(res).result() for res in processed_results]
第二行应执行该对象(调用__call__
方法。