質問内容
こんなプログラムを作成し実行してみました。
読みづらく申し訳ございません。
python
1import threading 2 3class P(object): 4 5 def dec_menber(self): 6 self.num = 0 7 8 def lets_thread(func): 9 def lets_thread_w(self, name_list): 10 11 print('all start') 12 13 threadlist = [] 14 for name in name_list: 15 thread = func(self, name) 16 threadlist.append(thread) 17 18 for thread in threadlist: 19 thread.start() 20 21 for thread in threadlist: 22 thread.join() 23 24 print('all end') 25 print(self.num) 26 27 return lets_thread_w 28 29class C(P): 30 31 def multi(self, name): 32 33 super().dec_menber() 34 35 for _ in range(5): 36 print(' ') 37 self.num = self.num + 1 38 39 print(name, self.num) 40 41 @P.lets_thread 42 def thread_func(self, name): 43 return threading.Thread(target=self.multi, args=(name,)) 44 45c = C() 46c.thread_func(['John','Aria','Jack','Lily','Mike','Ella']) 47
実行するたびに結果は変わりました。以下はその一例です。
※print(' ')で出力された空行は除いてあります
all start Aria 5 Jack 1 Mike 6 Lily 10 Ella 15 John 17 all end 17
作成された6つのスレッドは同じプロセス内で動き、
同じメモリを共有する為、このような結果になった
ということはなんとなくわかりますが、
私が欲しかった結果は以下になります。
※名前順は毎回異なってもOK
all start Ella 5 Jack 5 John 5 Aria 5 Mike 5 Lily 5 all end NameError: self.a is not defined
このプログラムをなるべく少ない改修で
欲しかった結果を出力させるにはどうすればよいでしょうか。
できれば class C 以外はいじりたくないのですが・・・。
class Pは他でも使うので、
num はどうしても親クラスで宣言をさせたいです。
なお、このプラグラムは似たようなものを仕事で使おうと考えており、
メンバ変数 num は Selenium の driver に変わる予定ですので、
排他制御ではなく、それぞれメモリ上に異なる変数として存在させたいです。
関数 multi の最終行は self.driver.quit() とする予定です。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。