线程之间的共享资源重建

时间:2014-04-09 17:28:32

标签: python synchronization python-multithreading

我试图找出在python中使用同步处理以下场景的正确方法。假设共享资源connection由8个线程用于通过连接发出命令。有时候,connection会过时,并会抛出异常,为此我添加了一个可以重新建立连接的异常处理例程。

问题是,当连接失效时,所有8个线程都将获得异常。为了解决这个问题,我可以添加一个信号量,这样一次只有一个线程会尝试重新建立连接,但即使这样也存在问题。

如果线程1是第一个获取信号量的线程,那么当遇到异常时,线程2-8很快就会在该信号量上被阻塞。线程1将获得一个新的连接,线程2-8可以成功使用并释放信号量。

此时,我想要发生的是让线程2-8再次处理,但是,由于它们先前已被阻塞在信号量上,因此线程2现在在信号量上被解除阻塞并尝试重新建立连接再次哪个线程1现在已经尝试使用了。这可能导致一个级联问题,其中线程继续尝试使用连接,而其他线程正在尝试重新建立它。是否存在处理共享资源的标准范例?

1 个答案:

答案 0 :(得分:0)

我会在任何线程获取信号量后检查连接是否已建立。如果没有,则重新建立,否则照常进行。