某些运营商在一段时间内没有影响吗? (Python)的

时间:2015-10-02 07:45:09

标签: python multithreading python-2.7 python-3.x python-multithreading

我正在使用多线程。有一个线程定期添加到某个变量,比如说每5秒。我想这样做,以便在调用函数f()时,对该变量的添加将不起作用。

我无法在任何地方找到如何做到这一点,我不知道从哪里开始。 是否有任何语法使某些操作在特定持续时间内没有特定变量影响?

或者有人可以给我任何起点,我可以弄清楚剩下的吗?

感谢。

2 个答案:

答案 0 :(得分:2)

我建议创建一个addToVariable或setVariable方法来处理有问题的变量的实际添加。这样你就可以设置一个标志,如果设置了标志,addToVariable会立即返回,而不是实际添加到有问题的变量中。

如果没有,您应该查看运算符重载。基本上你想要的是创建自己的数字类并编写一个新的添加函数,该函数包含某种标志,可以阻止进一步添加以产生任何效果。

答案 1 :(得分:1)

您可以使用锁定保护增量,并在f()调用期间获取锁定:

import threading
import time

lock = threading.Lock()
# ...
def f():
    with lock:
        # the rest of the function

# incrementing thread
while True:
    time.sleep(5 - timer() % 5) # increment on 5 second boundaries
    with lock:
        x += 1

执行f()时阻塞递增线程。另请参阅How to run a function periodically in python