Heim  >  Artikel  >  Backend-Entwicklung  >  Ausführliche Erläuterung zur Verwendung von Semaphoren in Python3.X-Threads

Ausführliche Erläuterung zur Verwendung von Semaphoren in Python3.X-Threads

黄舟
黄舟Original
2017-07-24 15:20:211761Durchsuche

Das Semaphor ist eine Variable, die den Zugriff auf öffentliche Ressourcen oder kritische Abschnitte steuert. Das Semaphor verwaltet einen Zähler, der die Anzahl der Threads angibt, die gleichzeitig auf die Ressource zugreifen oder den kritischen Abschnitt betreten können. Der folgende Artikel führt Sie hauptsächlich in die Verwendung von Semaphoren in Python3.X-Threads ein. Lassen Sie uns gemeinsam einen Blick darauf werfen.

Vorwort

Ich habe kürzlich Python gelernt und festgestellt, dass das Verständnis der Grundkenntnisse von Thread-Semaphoren beim Verständnis von Python-Threads eine große Hilfe sein wird ausführlich. In diesem Artikel erfahren Sie, wie Sie Semaphoren in Python3 verwenden. >

In Threads werden Semaphoren hauptsächlich zur Aufrechterhaltung begrenzter Ressourcen verwendet, sodass nur eine bestimmte Anzahl von Threads die Ressource zu einem bestimmten Zeitpunkt verwenden kann

Es ist festzustellen, dass in diesem Programm immer nur 2 Crawler aktiv sind


# -*- coding:utf-8 -*-
""" Created by FizLin on 2017/07/23/-下午10:59
 mail: https://github.com/Fiz1994
 信号量

 maxconnections = 5
...
pool_sema = BoundedSemaphore(value=maxconnections)
Once spawned, worker threads call the semaphore's acquire and release methods when they need to connect to the server:

pool_sema.acquire()
conn = connectdb()
... use connection ...
conn.close()
pool_sema.release()


"""
import threading
import time
import random

sites = ["https://www.baidu.com/", "https://github.com/Fiz1994", "https://stackoverflow.com/",
   "https://www.sogou.com/",
   "http://english.sogou.com/?b_o_e=1&ie=utf8&fr=common_index_nav&query="] * 20
sites_index = 0
maxconnections = 2
pool_sema = threading.BoundedSemaphore(value=maxconnections)


def test():
 with pool_sema:
  global sites_index, sites
  url = str(sites[sites_index])
  k = random.randint(10, 20)
  print("爬去: " + url + " 需要时间 : " + str(k))
  sites_index += 1
  # print(url)
  time.sleep(k)
  print('退出 ', url)


for i in range(100):
 threading.Thread(target=test).start()

Zusammenfassung

Das obige ist der detaillierte Inhalt vonAusführliche Erläuterung zur Verwendung von Semaphoren in Python3.X-Threads. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn