类和并发期货多线程

问题描述 投票:0回答:1

我刚刚开始理解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...>]

非常感谢。

python python-3.x multithreading class
1个回答
0
投票

我认为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__方法。

© www.soinside.com 2019 - 2024. All rights reserved.