线程锁

  • 功能
    解决多个线程同时使用全局变量,有可能会造成的数据的混乱
  • 如何创建锁
锁对象 = 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号索引可取得值