需要的!
为什么呢,以 python 的第三方协程实现 eventlet 为例子
看下面的代码:
from loguru import logger
import eventlet
# from eventlet.lock import Lock
# eventlet.monkey_patch()var = 0def foo(i):
global varif var < 10:
eventlet.sleep(1)
var += 1pool = eventlet.GreenPool()
for body in pool.imap(foo, [i for i in range(100)]):
passlogger.debug(f'最后的 {var}')
输出结果:
╰─?time python -u "/Users/ponponon/Desktop/code/me/ideaboom/test_evenetlet/need_lock_with_sleep.py"
2022-06-29 23:33:03.015 | DEBUG| __main__::23 - 最后的 100
python -u0.24s user 0.06s system 20% cpu 1.439 total
使用了锁之后,就正常了
from loguru import logger
import eventlet
from eventlet.lock import Lock
# eventlet.monkey_patch()var = 0lock=Lock()def foo(i):
global var
with lock:
if var < 10:
eventlet.sleep(1)
var += 1pool = eventlet.GreenPool()
for body in pool.imap(foo, [i for i in range(100)]):
passlogger.debug(f'最后的 {var}')
【协程做并行也需要加锁吗()】输出结果:
╰─?time python -u "/Users/ponponon/Desktop/code/me/ideaboom/test_evenetlet/need_lock_with_sleep.py"
2022-06-29 23:31:35.865 | DEBUG| __main__::25 - 最后的 10
python -u0.27s user 0.04s system 2% cpu 10.351 total
推荐阅读
- Data|Web Scraping with Beautiful Soup for Data Scientist
- nameko 是一个服务一个 amqp 连接,还是每个队列 work 函数一个 amqp 连接()
- 机器学习和深度学习|RealSense D435 的开发日记(API 汇总)
- 机器学习和深度学习|RealSense D435 的开发日记(pyrealsense小实战项目)
- 机器学习和深度学习|tensorflow的安装(要注意版本哦)
- Python每日一练|Python每日一练(牛客网新题库)——第10天(从入门到实践四十招)
- 程序人生|公开处刑|阿里、京东时薪对比曝光,PDD时薪行业最高
- [python刷题模板] 子序列自动机
- html|分享 82个实用的前端开发工具