【发布时间】:2020-02-19 14:04:25
【问题描述】:
我刚刚开始了解 python 中类的概念,我希望改进我的脚本。基本上,我的脚本使用请求库检查各种 URL 的状态,并对收到的数据进行其他后处理。目前,我的脚本充满了函数,并且将相同的参数传递给每个函数。我面临的问题是我正在使用 concurrent.futures 多线程,但不确定如何使用它来调用类而不是函数。
我只是在下面做一个简单的测试,以便能够在处理后从类中检索字典。但是,它返回给我一个类对象,我不知道如何从类对象中提取数据。
我的课程的目的是我想用它来获取每个 url 的状态并进行一些后期处理并返回字典。
from concurrent.futures import ThreadPoolExecutor
class capture_screenshot(object):
def __init__(self, customer_data):
self.customer_data = customer_data
def complex_function(self):
....
self.customer_data = processed_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.items()))
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...>]
非常感谢。
【问题讨论】:
-
它返回给我一个类对象是什么意思?可以发minimal reproducible example吗?
-
@AMC 我已根据您的要求修改了代码。
-
那不是类,那些是实例。您尚未定义表示。
-
查看 ˋ__repr__ˋ 和 ˋ__str__ˋ 方法的文档。它们定义了实例的显示方式。
-
从你的描述看来,一个类似乎不合适。一般来说,如果一个类只有ˋ__init__ˋ和ˋ__call__ˋ,那么定义一个函数是一种复杂的方式。
标签: python python-3.x multithreading class