2010-12-29 5 views
0

私はアクションを実行するオブジェクトを持っています。そして、再びアクションを実行する前に1秒間スリープします。ただし、オブジェクトには、1秒間のスリープ期間に関係なく、常にアクセス可能でなければならない変数があります。オブジェクトの実行が中断したとき、その変数にアクセスできない場合pythonのsleep()はオブジェクトの変数へのアクセスを妨げますか?

これはPythonです。

ありがとうございました。

EDIT 1: 'アクセス不可' を明確化:

オブジェクトAは、Bが繰り返しアクセスする必要があるオブジェクト変数xを持っています。 オブジェクトAは1秒間スリープします。オブジェクトBがAがスリープしているときにxを使用しようとすると問題はありますか?

EDIT 2:

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) 

はこれを使用して別のオブジェクトになります。 は言及し忘れた2つのオブジェクトが

EDIT 3(私はGILを避けるために、プロセスを使用しています)個々のプロセスとして実行されていますQueueControllerクラスは1秒間スリープしても 'queues_'変数を使用することができますか?私は睡眠が実行を止めるのではないかと心配していますが、副作用としてそれらのqueue_変数にアクセスすることもできます。

+2

にアクセスしてください。オブジェクトはどこからアクセスしましたか? – alexn

+0

解析エラー、開始からの再実行 - 「アクセスできない」とはどういう意味ですか? –

+5

オブジェクトはスリープしません。スレッドはスレッドを実行しません。 –

答えて

11

time.sleep()はGILをリリースしないので、他のスレッドは実行されます。

あなたが質問した質問に答える代わりに私がこの答えを出す理由は、質問したことが意味をなさないということです。他のスレッドを実行する機能以外のアクセスは阻止されません。

1

決してPythonにはあまり触れられませんが、私は答えを知っていると思います。事は:メイン以外のスレッドがありますか?答えが「はい」の場合、スレッドはスリープ状態になることができますが、他のスレッドはまだアクティブであるため、スレッドはアクセス可能です(ここで競合状態を監視してください)。 他のスレッドがない場合は、メインスレッドがスリープしているため、あまり多くのことを行うことができません。何も起こりません。

EDIT:

オブジェクトA Bが繰り返しアクセスする必要があるオブジェクト変数xを有します。オブジェクトAは1秒間スリープします。オブジェクトBがAがスリープしているときにxを使用しようとすると問題はありますか?

誰かがすでに話したように、オブジェクトはスリープ状態にはならず、スレッドは実行します。したがって、別のスレッドにオブジェクトBがあり、Aがスリープ状態になると、BからAにアクセスできます。そうでない場合、メインスレッド(メインスレッドでAが実行されていると仮定します)がスリープして何も起こりません。スレッドが何であるか疑問がある場合は、http://en.wikipedia.org/wiki/Thread_%28computer_science%29

関連する問題