如题,库函数看的累人,希望有人口语化解释一下
python 3.8.0
实际测试,不管加不加锁,生产函数没有覆盖数据的情况,消费函数们各拿各自的,没有多个消费函数拿同一个队列同一个数据的情况,实际情况怎么样就不清楚了
那么,有必要加锁给消费函数获得独占 queue 的访问权限,确保仅有一个消费函数只拿一个数据,这样会防止数据竞争的问题?
chatgpt 回答自相矛盾,说用semaphore
的情景下,能保护共享资源不会发生数据争抢。。。我问既然用semaphore
那有必要用asyn with lock
么,它答如果不加锁会导致访问共享资源产生的一些问题。。。
1
ruanimal 2023-03-10 09:55:34 +08:00
queue 是线程安全的
|
2
raymanr 2023-03-10 10:18:45 +08:00
没用过 semaphore, 不过感觉没必要给 queue 加锁吧
|
3
copper20 2023-03-10 10:35:14 +08:00 1
1. chatgpt 说话信一半就行了
2. py 的 queue 本身都是多线程安全的,queue.Queue 用 mutex 实现,queue.SimpleQueue 用 semaphore 实现 3. 使用 semaphore>=2 的情况下,算是多个生产函数往 queue 添加数据,但是因为 queue 本身多线程安全,所以问题不大 4. semaphore 和 mutex 可以认为是对于一组资源的不同保护策略,针对一组资源一般只用一种策略 |
4
zzl22100048 2023-03-10 17:41:51 +08:00
asyncio 的 queue 不需要锁,本身就是协程安全的
|
5
ALLROBOT OP |
6
ruanimal 2023-03-13 10:03:47 +08:00
别把 chatgpt 的话当真,v2ex 现在这种情况很多。
|