线程锁
-
功能
解决多个线程同时使用全局变量,有可能会造成的数据的混乱
-
如何创建锁
锁对象 = threading.Lock()
lock 英 [lɒk] 美 [lɑːk] v. (用锁)锁上;被锁住;把…锁起来;(使)固定,卡住,塞住 n. 锁;车锁;制动器;锁定器;制轮楔;(机器部件等的)锁定
-
如何使用锁
-
上锁
锁对象.acquire()
acquire 英 [əˈkwaɪə(r)] 美 [əˈkwaɪər] v. (通过努力、能力、行为表现)获得;购得;获得;得到
-
解锁
锁对象.release()
release 英 [rɪˈliːs] 美 [rɪˈliːs] v. 释放;放出;放走;放开;松开;使自由移动(或飞翔、降落等);发泄;宣泄 n. 释放;获释;公开;发行;发布;新发行的东西;(尤指)新激光唱片,新电影
-
进程锁
-
创建锁
进程锁对象 = multiprocessing.Lock()
-
使用锁
-
上锁
进程锁对象.acquire()
-
解锁
进程锁对象.release()
-
守护进程
进程对象.daemon = True
daemon
英 [ˈdiːmən] 美 [ˈdiːmən]
n.
(古希腊神话中的)半神半人精灵
信号量
- 创建对象
信号量对象 = multiprocessing.Semaphore(钥匙的数量)
Semaphore
英 [ˈseməfɔː(r)] 美 [ˈseməfɔːr]
信號量;旌旗灯号量;信号量;信号灯;信号
-
使用
-
获得-从面版上拿
信号量对象.acquire()
-
释放-归还到面版上
信号量对象.release()
-
-
同步与异步
-
阻塞与非阻塞
-
并行与并发
range迭代器
创建range的对象
range(数值)
range(起点值,终点值)
range(起点值,终点值,步长)
它的效果相当于给我们快速的生成了一个列表
但是,它比列表省空间,效率高
列表生成式
-
特点
节省空间,比直接的列表要省空间
-
写法
生成的列表 = [变量 for 变量 in 容器]
-
案例
一行代码打印九九乘法表
print(([(['%s*%s=%-2s' % (y, x, x*y) for y in range(1, x+1)]) for x in range(1, 10)]))
复习如何解决粘包问题
-
描述
连续send小数据时,他们会粘在一起发送
收消息时如果长度与实发不符合,下一次收消息时会发生顺序的错乱
-
解决
- 通过阻塞方式,例如input或tcp的recv等
- 通过延迟方式,例如time.sleep(0.001)
- 改变客户端与服务端的
-
工具模块
- struct模块
- struct.pack(‘i’, 整数) ----》 四个字节的bytes数据
- struct.unpack(‘i’, 打包的bytes数据) ---------》长度元组。 通过0号索引可取得值