0

1 つのスレッドで os.chdir を使用して現在のディレクトリを変更すると、os.chdir の呼び出し前に既に存在していたスレッドの現在のディレクトリが変更されるかどうかを判断するプログラム 私の質問は、ライブ スレッドの値を取得するにはどうすればよいですか?

import threading
import time
import os
class MyThread(threading.Thread):
def __init__(self, *args, **kw):
    threading.Thread.__init__(self, *args, **kw)
    self.sleeptime = 2
def run(self):        
    for i in range(self.sleeptime):
        for j in range(500000):
            k = j*j
        print(self.name, "finished pass", i)
    print(self.name, "finished after", self.sleeptime, "seconds")

bgthreads = threading.active_count()
threadOne = os.chdir("V:\\workspace\\Python4_Homework10")
threadTwo = os.chdir("V:\\workspace")
threadThree = os.chdir("V:")
tt = [MyThread(threadOne), MyThread(threadTwo), MyThread(threadThree)]
for t in tt:    
   t.start()

print("Threads started")
while threading.active_count() > bgthreads:
    time.sleep(2)
    print("tick")
4

1 に答える 1

0

少し大雑把ですが、これで仕事がはかどるかもしれません。

#!/usr/bin/env python3

import os
import threading

def threadReporter(i,name):
    if name == 'Thread-changer': # crude, but gets the job done for this
        os.chdir('/tmp')
    print("{0} reports current pwd is: {1}".format(name,os.getcwd()))

if __name__ == '__main__':
    # create pre-chdir and changer Thread
    t_pre = threading.Thread(target=threadReporter, args=(1,'Thread-pre'))
    t_changer = threading.Thread(target=threadReporter, args=(2,'Thread-changer'))

    # start changer thread
    t_changer.start()
    # wait for it to finish
    t_changer.join()

    # start the thread that was created before the os.chdir() call
    t_pre.start()

    # create a thread after the os.chdir call and start it
    t_post = threading.Thread(target=threadReporter, args=(3,'Thread-post'))
    t_post.start()

上記で gps が既に指摘したように、現在の作業ディレクトリはプロセス グローバルであり、生成/実行されるスレッドごとに分離されていません。したがって、上記のプログラムからの現在の作業ディレクトリのレポートは、スレッドがいつ作成されたかに関係なく、実行される各スレッドで等しくなります。os.chdir() の後、その新しい作業ディレクトリがすべてのスレッドに設定されます。

于 2012-06-27T09:25:01.860 に答える