一、Python正则的一个小问题
import re
html = """
<p>hello world</p> <p>anyiya1 lake</p> <p>anyiya2 lake</p>
"""
last_name = 'lake'
pattern = re.compile(f'<p>(.*?){last_name}</p>',re.DOTALL)
first_name = pattern.search(html).group(1)
print(first_name)
# 输出:hello world</p> <p>anyiya1
# 期望:anyiya1
Q:'?'可以让右边界非贪婪,如何让左边界也尽可能的小呢?
二、Redis异步并发下写的安全问题
# 以下代码处在一个异步模块中,存在并发操作的可能
import redis
redis_pool = redis.ConnectionPool(host='127.0.0.1', port=6379, password='', db=0)
redis_conn = redis.Redis(connection_pool=redis_pool)
# 代码块A ...
while True:
if redis_conn.get('status') == b'bitlock':
page.wait_for_timeout(random.randint(10000,20000))
else:
redis_conn.watch('status')
pipe = redis_conn.pipeline()
pipe.set('status', 'bitlock')
exec_result = pipe.execute()
# 更改状态失败,其他线程已经更改了状态
if exec_result is None:
continue
# 更改状态成功
else:
break
# 代码块B ...
redis_conn.set('status','unlock')
场景其实是并发下某一模块只能单实例运行,最优策略当然是用队列再做个负载均衡,但是需求急,想先通过上锁逻辑临时处理这个问题。任务并发也没有到百万级,只是在实践过程中引起了思考。
Q:Redis写操作通过事务,这样就能保证写操作的绝对安全吗?(绝对不会并发上锁)