我试图找出在python中使用同步处理以下场景的正确方法。假设共享资源connection
由8个线程用于通过连接发出命令。有时候,connection
会过时,并会抛出异常,为此我添加了一个可以重新建立连接的异常处理例程。
问题是,当连接失效时,所有8个线程都将获得异常。为了解决这个问题,我可以添加一个信号量,这样一次只有一个线程会尝试重新建立连接,但即使这样也存在问题。
如果线程1是第一个获取信号量的线程,那么当遇到异常时,线程2-8很快就会在该信号量上被阻塞。线程1将获得一个新的连接,线程2-8可以成功使用并释放信号量。
此时,我想要发生的是让线程2-8再次处理,但是,由于它们先前已被阻塞在信号量上,因此线程2现在在信号量上被解除阻塞并尝试重新建立连接再次哪个线程1现在已经尝试使用了。这可能导致一个级联问题,其中线程继续尝试使用连接,而其他线程正在尝试重新建立它。是否存在处理共享资源的标准范例?
答案 0 :(得分:0)
我会在任何线程获取信号量后检查连接是否已建立。如果没有,则重新建立,否则照常进行。