Aşağıdaki kodu göz önünde bulundurun:
#/usr/bin/env python
from time import sleep
from random import random
from threading import Thread, local
data = local()
def bar():
print("I'm called from", data.v)
def foo():
bar()
class T(Thread):
def run(self):
sleep(random())
data.v = self.getName() # Thread-1 and Thread-2 accordingly
sleep(1)
foo()
>> T (). Başla (); T (]. Başlangıç ()
Thread-2'den aradım
Konu-1'den aradım
Burada threading.local (), bazı verileri foo () arayüzünü değiştirmeden run () 'dan bar ()' a aktarmanın hızlı ve kirli bir yolu olarak kullanılır.
Global değişkenleri kullanmanın işe yaramayacağını unutmayın:
#/usr/bin/env python
from time import sleep
from random import random
from threading import Thread
def bar():
global v
print("I'm called from", v)
def foo():
bar()
class T(Thread):
def run(self):
global v
sleep(random())
v = self.getName() # Thread-1 and Thread-2 accordingly
sleep(1)
foo()
>> T (). Başla (); T (]. Başlangıç ()
Thread-2'den aradım
Thread-2'den aradım
Bu arada, bu veriyi foo () argümanı olarak aktarmayı göze alabilseydiniz - bu daha zarif ve iyi tasarlanmış bir yol olurdu:
from threading import Thread
def bar(v):
print("I'm called from", v)
def foo(v):
bar(v)
class T(Thread):
def run(self):
foo(self.getName())
Ancak, üçüncü taraf veya kötü tasarlanmış kod kullanılırken bu her zaman mümkün değildir.