认识kali工具的时候,看到了bbqsql。据说是烤肉barbecue的意思。看图片(icon)也确实像。本着吃货的第一要义,当然先从这里入手。
具体怎么用还不会。但是,点击图标的时候,尴尬的一幕发生了:
上图报错显示找不到#扣肉#(coros)这个好吃的了。于是从网上找啊找,找啊找,我的×扣肉×在哪里?
遍历gevent所有文件,也没有扣肉。
没图我说个j8
这不行,这会儿正饿着肚子呢,我的扣肉,快出来!
于是请教了大神,一个女的大神,我们俩一起研究,最终。。。
我们一起研究了什么呢?
以下是我们的灵感:
一、Semaphore对象
1. 基本介绍
Semaphore 是最古老的同步原语之一,由荷兰计算机科学家 Edsger W. Dijkstra 发明。(他最早使用名为 P() 和 V() 的函数对应 acquire() 和 release())
Semaphore 在内部管理着一个计数器。调用 acquire() 会使这个计数器 -1,release() 则是+1.计数器的值永远不会小于 0,当计数器到 0 时,再调用 acquire() 就会阻塞,直到其他线程来调用release()
Semaphore 也支持上下文管理协议
class threading.Semaphore(value=1)
acquire(blocking=True,timeout=None)
本方法用于获取 Semaphore
当使用默认参数调用本方法时:如果内部计数器的值大于零,将之减一,并返回;如果等于零,则阻塞,并等待其他线程调用 release() 方法以使计数器为正。这个过程有严格的互锁机制控制,以保证如果有多条线程正在等待解锁,release() 调用只会唤醒其中一条线程。唤醒哪一条是随机的。本方法返回 True,或无限阻塞
如果 blocking=False,则不阻塞,但若获取失败的话,返回 False
当设定了 timeout 参数时,最多阻塞 timeout 秒,如果超时,返回 False
对头,
将扣肉那一行注释,重新导入threading 的就好了。
折腾了一上午,改了两行代码,终于又能愉快的一起吃烤肉了
只需要改两行代码就能完成的工作,被我哇啦哇啦比比了大半天,是不是心里很不爽呢?没事的,就喜欢你看不惯我又打不到我样子~