使用 pdb 逐步运行
python -m pdb actor.py --config examples/ppo/cartpole_actor.yaml --use_gpu
用到的库
pickle实现了用于序列化和反序列化Python对象结构的二进制协议。可以序列化自定义对象。
pickle.dump(obj, file, [protocol]) 序列化对象
pickle.load(file) 反序列化对象
- 类型检查,防止运行时出现参数和返回值类型不符合。
- 作为开发文档附加说明,方便使用者调用时传入和返回参数类型。
- 该模块加入后并不会影响程序的运行,不会报正式的错误,只有提醒。
注意:typing模块只有在python3.5以上的版本中才可以使用,pycharm目前支持typing检查
from typing import List, Tuple, Dict
def add(a:int, string:str, f:float, b:bool) -> Tuple[List, Tuple, Dict, bool]:
list1 = list(range(a))
tup = (string, string, string)
d = {"a":f}
bl = b
return list1, tup, d,bl
print(add(5,"hhhh", 2.3, False))
# 结果:([0, 1, 2, 3, 4], ('hhhh', 'hhhh', 'hhhh'), {'a': 2.3}, False)
zmq
通信架构
- 创建和销毁套接字:zmq_socket(), zmq_close()
- 配置和读取套接字选项:zmq_setsockopt(), zmq_getsockopt()
- 为套接字建立连接:zmq_bind(), zmq_connect()
- 发送和接收消息:zmq_send(), zmq_recv()
设置非阻塞 socket.recv(flags=zmq.NOBLOCK)。zmq.ZMQError 可以替换为 zmq.Again。
while True:
try:
msg = subscriber.recv(zmq.NOBLOCK)
except zmq.ZMQError:
break
PUB-SUB
- 使用 SUB 设置一个订阅时,必须使用 zmq_setsockopt() 对消息进行过滤。setsockopt 的详细解释,可参考http://api.zeromq.org/3-2:zmq-setsockopt。
- PUB 和 SUB 谁 bind 谁 connect 并无严格要求(虽本质并无区别),但仍建议 PUB 使用 bind,SUB 使用 connect
- 也就是如果 push 的 send 不能 send 出去,就会出现一直阻塞的情况,而 pull 的 recv 也是会一直等待数据的到达,否则无法执行后面的函数。https://blog.csdn.net/weixin_42066185/article/details/103015332
- Process:用于创建进程模块
- Array:不同的Python进程之间创建共享的内存区域
m = Array('i',3) 表示开辟 3 个空间,且均为整型 i,其实就是一个列表
m = Array('i',[1,2,3,4,5]) 表示开辟 5 个空间,同时存入列表中的元素
从 10 开始无限循环
for i in count(10): // 10 11 12 13 ...from pyarrow import serialize


![[RL] framework [RL] framework](http://www.mshxw.com/aiimages/31/529492.png)
