gpt4 book ai didi

python - 防止Python线程饥饿

转载 作者:行者123 更新时间:2023-12-01 04:38:53 24 4
gpt4 key购买 nike

我有一些函数可以进行一些文件写入。信号量用于将线程数限制为 2。线程总数为 3。如何防止 3 个线程出现饥饿?队列是一个选项吗?

import time
import threading

sema = threading.Semaphore(2)


def write_file(file,data):
sema.acquire()
try:
f=open(file,"a")
f.write(data)
f.close()
finally:
sema.release()

最佳答案

我必须反对已接受的问题。确实,Conditionwait 进行了排队,但更重要的部分是当它尝试 acquire the Condition lock 时.

线程释放的顺序是not deterministic

The implementation may pick one at random, so the order in which blocked threads are awakened should not be relied on.

在三个线程的情况下,我同意,两个线程尝试同时获取锁的可能性很小(一个正在工作,一个处于等待状态,一个正在获取锁),但仍然可能存在干扰。

对于您的问题,IMO 的一个好的解决方案是一个线程,其唯一目的是从队列中读取数据并将其写入文件。所有其他线程都可以写入队列并继续工作。

关于python - 防止Python线程饥饿,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31186947/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com