Python信号量"挂起"在紧密的循环中

时间:2015-07-02 22:26:58

标签: python python-2.7

我一直遇到Python Semaphores出现问题" lock"在获得/释放之间存在紧密关系的无限时间内。我对Lock / RLock没有这个问题

以下代码是针对最简单的案例提炼出来的,该案例展示了相关行为。

preg_match('#data:image/\w+;base64,\K[^"<]*#i', '<img src="data:image/png;base64,_BASE_64_DATA_HERE"><br>', $match);
echo $match[0]; // => _BASE_64_DATA_HERE

当我使用信号量方法时,这会花费不可预测的时间(有时是20分钟!)

当我使用Lock或RLock时,这很快就像我期望的那样完成。

我错过了什么吗?看起来默认值为1的信号量应该与Lock相同。

根据我正在查看的文档,在一个线程上调用release应该取消阻塞不确定的其他阻塞线程。然而,我认为正在发生的事情是,调用该版本的线程可以自由地继续运行,然后如果它仍在其时间片内则重新获取。当再次点击获取时,它会看到未阻止的信号量并再次访问。运气不好因此迫使等待线程等待很长时间。

我错过了什么吗?为什么Lock / RLock会更好用?

0 个答案:

没有答案