Früher wurde threading.thread() verwendet, um die Multithread-Parallelität der Schnittstelle zu erleichtern. Dies ist jedoch nützlicher, wenn die Anzahl der Parallelitäten gering ist Die Anzahl der Parallelitäten ist groß. Zusätzlich zum Thread-Paket können wir bei der Coroutine-Verarbeitung auch die Thread-Pool-Methode verwenden.
Laienhaft ausgedrückt besteht die Implementierung des Thread-Pools darin, alle Aufgaben in die Nachrichtenwarteschlange zu stellen, mehrere Threads zu starten und dann den Thread auszuführen. Nach Abschluss der Thread-Ausführung wird die Thread-Aufgabe jedoch nicht unterbrochen Die Thread-Aufgabe wird weiterhin zur Thread-Ausführung aus der Nachrichtenwarteschlange abgerufen, sodass der Thread-Pool im Vergleich zu Multithread-Vorgängen viele Schritte zum Erstellen und Schließen von Threads einspart, wodurch die meisten Ressourcen und Zeit gespart werden.
import concurrent.futures
ThreadPoolExecutor. Es gibt zwei Thread-Pool-Methoden: Map() und Submit(). Heute werden wir zuerst über die Map()-Methode sprechen. Seine Syntax lautet:
with concurrent.futures.ThreadPoolExecutor() as pool: res = pool.map(craw, uid_list) print(res)
map()
Der darin enthaltene Methodenname enthält nicht ()uid_list
ist der Methodenparameter, der benötigt wird in der Map()-Methode übergeben werdenmap()
内craw为方法名,这里方法命不带()
uid_list
def test_case_09(self): """5000用户并发助力""" # 通过yaml配置文件封装方法 获取uid_list uid_list = YamlHandler(YamlThePath().number_new).get_uid_list() # add_ticket获取5000账号登陆状态 with concurrent.futures.ThreadPoolExecutor() as pool: pool.map(AccountAccess().add_ticket, uid_list) # 5000账号线程池方法助力用户 with concurrent.futures.ThreadPoolExecutor() as pool: pool.map(PreheatMethod().help, [(uid, self.A, 1) for uid in uid_list]) # 获取用户被助力次数 response = PreheatMethod().init(self.A) print(f"当前用户被助力次数 :{response['data']['userInfo']['helpedCount']}次")
Werfen wir einen Blick auf die Methoden der beiden Schnittstellen, um ein besseres Gefühl zu bekommen
Das erste ist Um den Anmeldestatus zu erhalten, add_ticket
def add_ticket(self, uid): """ 获取单独用户t票 :param uid: 单独用户uid :return: """ self.data['url'] = ApiAddress().get_ticket self.data['host'] = ApiAddress().host self.params['uid'] = str(uid) self.params['type'] = 0 self.data['params'] = json.dumps(self.params) res = r().post(url=ApiAddress().ticket, data=self.data) print(f'获取t票结果:{uid}{res}') return uid
Eine sehr einfache Schnittstellenanforderung hat nur einen UID-Parameter, aber achten Sie darauf, dass die UID hier keine Liste ist, sondern nur ein Parameter.
Einige Schüler werden Fragen haben. Der in map() übergebene Methodenparameter ist eine Liste von UID-Inhalten. Die Methode
map () dient dazu, die benötigten Parameter in der Liste zu speichern und die von Ihnen angegebene Schnittstelle durch Durchqueren anzufordern.
Einige Leute fragen sich zu diesem Zeitpunkt vielleicht, weil ich mir damals die gleiche Frage gestellt habe: Was wäre, wenn eine Methode mehrere Parameter enthält und einige dieser Parameter nicht einmal festen Inhalt haben?
Werfen wir einen Blick auf eine andere Methode zum Anfordern der Hilfeschnittstelle
def help(self, agrs): """ 助力用户 :param agrs: uid:当前用户uid to_uid:助力用户uid count:助力次数 :return: """ uid, to_uid, count = agrs self.attrs['toUid'] = str(to_uid) self.attrs['count'] = count response = r().response(uid, self.code, "help", **self.attrs) logger.info(f'help response uid:{uid} to_uid:{to_uid}\n{response}') return response
Ja, wir übergeben sie über Tupel an die Hilfeschnittstelle und weisen den angegebenen Elementen über die Schlüsselwortpositionen im Tupel Werte zu.
Im Code des Thread-Pools verwenden wir die Listenableitung, um die Parameter in uid_list in das von Ihnen angegebene Tupel zu integrieren. Wenn hier mehrere Parameter vorhanden sind, können Sie natürlich auch ein Wörterbuch verwenden und das Wörterbuch zur Erleichterung des Schlüssels verwenden und Wert. Ändern von Parametern, da das Listenverständnis eine Liste zurückgibt, also fügen wir die erforderlichen Parameter in das Tupel und das Tupel in die Liste ein, damit wir den Map()-Thread-Pool für Methoden mit mehreren Parametern für die Parallelität verwenden können . .
with concurrent.futures.ThreadPoolExecutor() as pool: pool.map(PreheatMethod().help, [(uid, self.A, 1) for uid in uid_list])
[(uid, self.A, 1) for uid in uid_list]
Nachdem die Listenableitung erhalten wurde, handelt es sich wahrscheinlich um das folgende Listendateninhaltsformat
Das obige ist der detaillierte Inhalt vonSo verwenden Sie die Thread-Pool-Map()-Methode in Python, um eine Liste mit mehreren Parametern zu übergeben. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!