我有一个对象,就是执行一个动作,然后在再次执行动作之前睡一秒钟。但是,该对象有一些变量,无论它是否处于1秒睡眠期,都需要随时访问这些变量。当对象的执行被挂起时,其变量是否不可访问?在
这是Python。在
谢谢。在
编辑1: 澄清“无法接近”:
对象A具有对象B需要重复访问的变量x。 对象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类的另一个对象是否仍能使用“queues”变量,即使它休眠了一秒钟?我担心睡眠会停止执行,但也会影响对这些队列变量的访问。在
我从来没有接触过python,但我想我确实知道答案。问题是:除了main还有其他线程吗?如果答案是肯定的,那么它们是可访问的(注意这里的竞速条件),因为一个线程可以进入休眠状态,但其他线程仍然处于活动状态。 如果您没有其他线程,那么您将无法执行很多操作,因为主线程正在休眠,因此不会发生任何事情。在
编辑:
正如有人已经说过的,对象不会休眠,线程会休眠。因此,如果对象B在另一个线程中,而a进入休眠状态,则可以从B访问a所保存的内容,如果没有,则主线程(我假设a正在主线程中运行)将休眠,而不会发生任何事情。如果您对线程是什么有疑问,请检查这个:http://en.wikipedia.org/wiki/Thread\%28计算机科学%29在
time.sleep()
确实释放了GIL,因此允许其他线程运行。在我之所以不回答你的问题而给出这个答案是因为你问的问题毫无意义。除了允许其他线程运行之外,没有任何访问被阻止。在
相关问题 更多 >
编程相关推荐