Python中的sleep()会阻止访问对象的变量吗?

0 投票
2 回答
780 浏览
提问于 2025-04-16 09:11

我有一个对象,它需要执行一个动作,然后暂停1秒钟,再继续执行这个动作。不过,这个对象有一些变量需要随时都能访问,不管它是否在1秒的休眠状态中。那么,当这个对象的执行被暂停时,它的变量会变得无法访问吗?

这是在用Python编写的。

谢谢。

编辑1:
澄清一下“无法访问”的意思:

对象A有一个变量x,对象B需要反复访问这个变量。对象A休眠1秒钟。如果对象B在A休眠的时候尝试使用x,会不会有问题?

编辑2:
忘了提到这两个对象是作为独立的进程运行的(我使用进程是为了避免GIL的问题)。

编辑3:

class QueueController(Process):
    def __init__(self):
        Process.__init__(self)
        self.queue_stream    = Queue()
        self.queue_language  = Queue()
        self.queue_expander  = Queue()
        self.queue_feature   = Queue()
        self.queue_classify  = Queue()
        self.db = connect_to_db()

    def run(self):
        # Every second, allow 10 more tweets from the raw_tweets db
        # enter the queue_stream to be processed
        value = 0
        while True:
            for i in db.raw_tweets.find().skip(value).limit(30):
                self.queue_stream.put(i)
                value+=30
                sleep(1)

使用这个QueueController类的另一个对象,即使它休眠1秒钟,仍然能使用'queues_'变量吗?我担心休眠会停止执行,同时也会影响对这些queue_变量的访问。

2 个回答

1

我对Python了解不多,但我觉得我知道答案。问题是:除了主线程,还有其他线程吗?如果有,那它们是可以访问的(这里要注意竞争条件),因为一个线程可以进入休眠状态,但其他线程仍然在活动中。如果没有其他线程,那么你就没办法做太多事情,因为主线程在休眠,什么都不会发生。

编辑:

对象A有一个变量x,对象B需要反复访问这个变量。对象A休眠1秒。如果对象B在A休眠的时候尝试使用x,会有问题吗?

正如有人已经说过的,休眠的是线程,而不是对象。所以,如果你在一个不同的线程中有对象B,而A进入休眠状态,你可以从B访问A持有的内容。如果没有,主线程(我假设A是在主线程中运行)会休眠,什么都不会发生。如果你对线程是什么有疑问,可以查看这个链接:http://en.wikipedia.org/wiki/Thread_%28computer_science%29

11

time.sleep() 这个函数确实会释放全局解释器锁(GIL),这样其他线程就可以运行了。

我之所以这样回答,而不是直接回答你问的问题,是因为你问的问题本身就不太合理。除了让其他线程能够运行之外,没有任何访问会被阻止。

撰写回答