第三十二次总结:线程锁 ,信号量 , 粘包 ,迭代器, 列表生成式

线程锁

  • 功能

    解决多个线程同时使用全局变量,有可能会造成的数据的混乱

  • 如何创建锁

    锁对象 = 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()

 

粘包

  • 描述

    连续send小数据时,他们会粘在一起发送

    收消息时如果长度与实发不符合,下一次收消息时会发生顺序的错乱

  • 解决

    • 通过阻塞方式,例如input或tcp的recv等

    • 通过延迟方式,例如time.sleep(0.001)

    • 改变客户端与服务端的

  • 工具模块

    • struct模块

    • struct.pack('i', 整数) ----》 四个字节的bytes数据

    • struct.unpack('i', 打包的bytes数据) ---------》长度元组。 通过0号索引可取得值

 

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)]))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值