Форум сайта python.su
![[RSS Feed] [RSS Feed]](/static/djangobb_forum/img/feed-icon-small.png) 
			 
							 32
  32   
								
								# 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)
Офлайн
 
							 20
  20   
								
								> но он видимо создает новый экземпляр на каждый вызов
Ну сделай один вызов :-). И используй получившийся единственный глобальный экземпляр.
..bw
Офлайн
 
							 13
  13   
								
								У меня получилось так:
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)
Офлайн
 
							 32
  32   
								
								currentThread() - то что надо, спасибо
Офлайн
 
							 32
  32   
								
								…хотя это та же самая глобальная переменная (словарь)
Офлайн
 
							 13
  13   
								
								Не понял чего вы хотите, честно говоря. Получить объект треда из воздуха, что ли? Естественно где-нибудь они присутствуют в некоем отдельном месте. Сегодня в глобальном словаре, завтра еще где-то. Это уже детали реализации threading API, до которых вам не должно быть дела.
Отредактировано (Окт. 7, 2010 17:19:55)
Офлайн
 
							 14
  14   
								
								“официальный” способ такой
storage = threading.local()
storage.x = None
def a():
print storage.x
def b():
storage.x = 123
Офлайн
 
							 32
  32   
								
								Андрей Светлова… его единожды нужно вызывать, при старте приложения.
“официальный” способ такой
# 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)
Офлайн
 
							 14
  14   
								
								Пожалуйста.
И, прошу, никогда не используйте модуль thread. Не нужно…
Офлайн
![[RSS Feed] [RSS Feed]](/static/djangobb_forum/img/feed-icon-small.png)