Форум сайта python.su
# coding:utf8
import thread
import threading
import time
from random import randint
g_loop = True
def foo():
local = threading.local()
print local.A
def myThread():
local = threading.local()
local.A = randint(0,100)
while g_loop:
foo()
time.sleep(0.4)
thread.start_new_thread(myThread, tuple([]))
thread.start_new_thread(myThread, tuple([]))
raw_input('')
g_loop = False
time.sleep(1)
Отредактировано (Окт. 7, 2010 14:00:20)
Офлайн
> но он видимо создает новый экземпляр на каждый вызов
Ну сделай один вызов :-). И используй получившийся единственный глобальный экземпляр.
..bw
Офлайн
У меня получилось так:
from threading import Thread, currentThread
import time
g_loop = True
def foo():
print currentThread().tag
class myThread(Thread):
def __init__(self, tag, timeout):
Thread.__init__(self)
self.tag = tag
self.timeout = timeout
def run(self):
while g_loop:
foo()
time.sleep(timeout)
for tag, timeout in [('tag1', 1), ('tag2', 0.5)]:
myThread(tag, timeout).start()
time.sleep(10)
g_loop = False
time.sleep(1)
Отредактировано (Окт. 7, 2010 15:33:00)
Офлайн
currentThread() - то что надо, спасибо
Офлайн
…хотя это та же самая глобальная переменная (словарь)
Офлайн
Не понял чего вы хотите, честно говоря. Получить объект треда из воздуха, что ли? Естественно где-нибудь они присутствуют в некоем отдельном месте. Сегодня в глобальном словаре, завтра еще где-то. Это уже детали реализации threading API, до которых вам не должно быть дела.
Отредактировано (Окт. 7, 2010 17:19:55)
Офлайн
“официальный” способ такой
storage = threading.local()
storage.x = None
def a():
print storage.x
def b():
storage.x = 123
Офлайн
Андрей Светлова… его единожды нужно вызывать, при старте приложения.
“официальный” способ такой
# coding:utf8
import thread
import threading
import time
from random import randint
stor = threading.local()
def foo():
print stor.A
def myThread():
stor.A = randint(0,100)
for x in xrange(10):
foo()
time.sleep(0.4)
thread.start_new_thread(myThread, tuple([]))
thread.start_new_thread(myThread, tuple([]))
thread.start_new_thread(myThread, tuple([]))
time.sleep(5)
Офлайн
Пожалуйста.
И, прошу, никогда не используйте модуль thread. Не нужно…
Офлайн