小编dou*_*gle的帖子

如何可靠地重现此python代码中的竞争条件?

上下文

我最近发布了一个计时器类,用于审查Code Review.我有一种直觉感觉有并发错误,因为我曾经看过1单元测试失败,但无法重现失败.因此,我的代码审查发布.

我得到了一些很好的反馈,突出了代码中的各种竞争条件.(我想)我理解了问题和解决方案,但在进行任何修复之前,我想通过单元测试来暴露这些错误.当我尝试时,我意识到这很困难.各种堆栈交换答案建议我必须控制线程的执行以暴露bug,并且任何人为的时间不一定可移植到不同的机器上.这似乎是我试图解决的问题之外的许多偶然的复杂性.

相反,我尝试使用最好的静态分析(SA)工具python,PyLint,看看它是否会挑出任何错误,但它不能.为什么人类可以通过代码审查(实质上是SA)找到错误,但SA工具不能?

由于害怕尝试让Valgrind使用python(听起来像牦牛皮),我决定在修复错误时不要先复制它们.现在我在泡菜.

这是现在的代码.

from threading import Timer, Lock
from time import time

class NotRunningError(Exception): pass
class AlreadyRunningError(Exception): pass


class KitchenTimer(object):
    '''
    Loosely models a clockwork kitchen timer with the following differences:
        You can start the timer with arbitrary duration (e.g. 1.2 seconds).
        The timer calls back a given function when time's up.
        Querying the time remaining has 0.1 second accuracy.
    '''

    PRECISION_NUM_DECIMAL_PLACES = 1
    RUNNING = "RUNNING"
    STOPPED = "STOPPED" …
Run Code Online (Sandbox Code Playgroud)

python testing multithreading timer race-condition

29
推荐指数
2
解决办法
6848
查看次数

标签 统计

multithreading ×1

python ×1

race-condition ×1

testing ×1

timer ×1