Python中的sleep()会阻止访问对象的变量吗?
我有一个对象,它需要执行一个动作,然后暂停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 个回答
我对Python了解不多,但我觉得我知道答案。问题是:除了主线程,还有其他线程吗?如果有,那它们是可以访问的(这里要注意竞争条件),因为一个线程可以进入休眠状态,但其他线程仍然在活动中。如果没有其他线程,那么你就没办法做太多事情,因为主线程在休眠,什么都不会发生。
编辑:
对象A有一个变量x,对象B需要反复访问这个变量。对象A休眠1秒。如果对象B在A休眠的时候尝试使用x,会有问题吗?
正如有人已经说过的,休眠的是线程,而不是对象。所以,如果你在一个不同的线程中有对象B,而A进入休眠状态,你可以从B访问A持有的内容。如果没有,主线程(我假设A是在主线程中运行)会休眠,什么都不会发生。如果你对线程是什么有疑问,可以查看这个链接:http://en.wikipedia.org/wiki/Thread_%28computer_science%29
time.sleep()
这个函数确实会释放全局解释器锁(GIL),这样其他线程就可以运行了。
我之所以这样回答,而不是直接回答你问的问题,是因为你问的问题本身就不太合理。除了让其他线程能够运行之外,没有任何访问会被阻止。