utils 模块
utils 提供了一些框架或插件内常用的实用方法。
获取方法
python
from tooldelta import utils
1
以下的所有方法都是 Utils 类中的属性。
createThread
创建一个特殊线程,这个线程受ToolDelta主框架控制和收集。和普通线程类不一样的是,它能使用 stop() 中断运行(不是很安全),并且能在重载插件的时候被自动停止。
参数:
参数名 类型 说明 func (...) -> Any 线程函数 args tuple 函数传入的参数组,默认为空 usage str 线程的用途,建议填写,默认为空 **kwargs ... 线程函数的关键字参数,默认为空 返回:
类型 说明 ToolDeltaThread ToolDelta 线程对象
可以使用 .stop()
以中止 ToolDeltaThread
线程的执行(底层原理:在线程内下一条代码指令处引发专有异常),但是对于 time.sleep()
等阻塞函数,无法中止。
- 示例:
python
def hello_forever(greet, name):
while 1:
print(f"{greet}, {name}")
thread = utils.createThread(
hello_forever, ("Hello", "ToolDelta"), "一直说 hello"
)
while 1:
if input() == "quit":
thread.stop()
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
simple_fmt
对字符串以简单的方法进行格式化替换。
参数:
参数名 类型 说明 kw dict[str, Any] 替换标记与替换内容的映射字典 sub str 将被格式化的字符串 返回:
类型 说明 str 格式化后的字符串 示例:
python
print(
utils.simple_fmt(
{
"[arg1]": "Super",
"[arg2]": 2
},
"i am [arg1] and i'm [arg2] yrs old"
)
)
# output: i am Super and i'm 2 yrs old
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
thread_func
作为装饰器使用, 放在任意堵塞函数上,使函数在被执行的时候自身作为一个新线程启动,不会阻塞代码的继续运行。
参数:
参数名 类型 说明 usage str 线程显示名 示例:
python
@utils.thread_func("一个简单的方法")
def say_hi(name):
for i in range(5):
print(f"hi {name}")
time.sleep(1)
say_hi("Super")
say_hi("Boy")
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
thread_gather
并行获取多个阻塞函数的返回值。
参数:
参数名 类型 说明 funcs_and_args list[tuple[() -> Any, tuple]] 阻塞函数及其参数的列表 返回:
类型 说明 list[Any] 阻塞函数的返回值列表 示例:
python
(
baidu_resp,
bili_resp,
douyin_resp,
) = utils.thread_gather(
[
requests.get, ("https://www.baidu.com",),
requests.get, ("https://www.bilibili.com",),
requests.get, ("https://www.douyin.com",),
]
)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
try_int
传入任意值(e.g.字符串), 尝试转换为整数并返回,否则返回 None
fill_list_index
当列表 lst 长度比 default 小时, 使用 default 中的剩余内容填充 lst 的剩余部分。
参数:
参数名 类型 描述 lst list[Any] 待填充的列表 default list[Any] 用于填充默认值的列表 示例:
python
>>> list_a = [1, 2]
>>> utils.fill_list_index(list_a, [1, 2, 3])
>>> list_a
[1, 2, 3]
>>> list_a = [-2, -1]
>>> utils.fill_list_index(list_a, [1, 2, 3, 4])
>>> list_a
[-2, -1, 3, 4]
>>> list_a = ["我", "的"]
>>> utils.fill_list_index(list_a, ["你", "好", "世", "界"])
>>> list_a
["我", "的", "世", "界"]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
to_player_selector
将玩家名转化为目标选择器。 传入目标选择器时,不会产生任何效果。
参数:
参数名 类型 描述 playername str 玩家名 返回:
类型 描述 str 目标选择器 示例:
python
>>> utils.to_player_selector("SkyblueSuper")
'@a[name="SkyblueSuper"]'
>>> utils.to_player_selector("2334567")
'@a[name="2334567"]'
>>> utils.to_player_selector('@a[name="chfwd"]')
'@a[name="chfwd"]`
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
create_result_cb
创建一对回调锁(获取方法和设置方法)。
- 示例:
python
from uuid import uuid4
callback_handlers = {}
def callback_handler(uuid, data):
callback_handlers[uuid](data)
def wait_result():
timeout = 5 # 等待回调的超时时间
uuid_gen = str(uuid4())
getter, setter = utils.create_result_cb()
callback_handlers[uuid_gen] = setter
#
# 如果超时将返回None; 否则返回回调结果
result = getter(timeout)
del callback_handlers[uuid_gen]
return result
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
utils.tempjson 模块
utils.tempjson 模块可以将 json 文件载入缓存区从而进行快速读写,对运行速度和磁盘使用非常友好。
此文档已独立于实用方法文档。