# -*- coding: utf-8 -*-
"""
多进程 锁使用 逻辑:
10个进程各种睡眠2秒,然后打印。
不加锁同时打印出来,总共2秒,加锁一个接一个打印,总共20秒 总结:
1、Lock 只要1把锁,RLock 有多把锁,但是不清楚什么场景只适合用RLock 使用:
1. 创建所 lock = Lock() or lock = RLock()
2. 把锁当做参数传入给子进程
3. 在子进程执行代码中对代码块,加锁 lock.acquire(); 其他代码 lock.release() """ from multiprocessing import Process, Lock, RLock
import time # 不加锁
def f(l, i):
time.sleep(2)
print(time.strftime('%M:%S', time.localtime(time.time())),'hello world', i) # 加Lock
def f2(l, i):
l.acquire() # 竞争锁
time.sleep(2)
print(time.strftime('%M:%S', time.localtime(time.time())),'hello world', i)
l.release() # 释放锁 # 加Rlock
def f3(l, i):
l.acquire() # 竞争锁
l.acquire() # 抢到锁后,再加一把锁
time.sleep(2)
print(time.strftime('%M:%S', time.localtime(time.time())),'hello world', i)
l.release() # 释放锁
l.release() # 前面几个acquire,这里就有几个 release 如果注释掉,其他进程阻塞 if __name__ == '__main__':
lock = Lock()
rlock = RLock() import ptools;ptools.checkname(rlock);exit(0) # base
# for num in range(10):
# Process(target=f, args=(None, num)).start() # case1
for num in range(10):
Process(target=f2, args=(lock, num)).start()
#
# # case2
# for num in range(10):
# Process(target=f3, args=(rlock, num)).start() """
Out:
不加锁
('49:31', 'hello world', 3)
('49:31', 'hello world', 2)
('49:31', 'hello world', 1)
('49:31', 'hello world', 7)
('49:31', 'hello world', 8)
('49:31', 'hello world', 5)
('49:31', 'hello world', 6)
('49:31', 'hello world', 4)
('49:31', 'hello world', 9)
('49:31', 'hello world', 0) case1 加锁,case2差不多
'49:52', 'hello world', 0)
('49:54', 'hello world', 7)
('49:56', 'hello world', 2)
('49:58', 'hello world', 5)
('50:00', 'hello world', 4)
('50:02', 'hello world', 3)
('50:04', 'hello world', 8)
('50:06', 'hello world', 1)
('50:08', 'hello world', 6)
('50:10', 'hello world', 9)
"""

最新文章

  1. mysql while,loop,repeat循环,符合条件跳出循环
  2. Android studio 运行设置
  3. MySQL性能优化总结(转)https://yq.aliyun.com/articles/24249
  4. Maven打包时囊括本地依赖的jar包
  5. typedef函数指针那些事
  6. 查询sql 语句的好坏
  7. PHP - Cookie 应用
  8. Acquire and Release Semantics
  9. PDF.NET SOD Ver 5.1完全开源
  10. BZOJ 2243 染色
  11. Win10 使用笔记
  12. JavaScript中的Generator函数
  13. IDEA中读取 resource目录下文件
  14. WEB服务器----Apache 安装配置
  15. hdu 1263 水果 结构的排序+sort自定义排序
  16. 【每日dp】 Gym - 101889E Enigma 数位dp 记忆化搜索
  17. 教你一步步composer安装Magento2.3
  18. 玩转X-CTR100 l STM32F4 l AT24C02 EEPROM存储
  19. php-fpm 配置进程池
  20. Maximum Subarray leetcode java

热门文章

  1. cesium 入门开发系列地图鹰眼功能(附源码下载)
  2. 前端JS实现一键导入excel表格
  3. redis windows版安装
  4. MySQL数据库:基本操作及增删改查语句
  5. 通过官网模板轻松实现Grafana的可视化界面配置(以MySQL监控项为例)
  6. go设计模式--单例singleton
  7. 史上最全的CSP2019复习指南
  8. C语言中,关于排序的问题(输入n个数,输出最大的那个)
  9. 解决java poi导出excel2003不能超过65536行的问题
  10. Eclipse Memory Analyzer(MAT),内存泄漏插件,安装使用一条龙