2015-10-23 4 views
0

С этим кодом я надеюсь, что он должен сразу же напечатать «войти», затем спать, а затем распечатать «exit». Но он делает все за один раз. Как мне заставить его работать? И прямо сейчас он блокирует основное приложение, поэтому в идеале я хочу запустить вызываемую функцию в отдельном потоке. Но затем «ввод» и «выход» печатаются немедленно, а после таймера сна - вызов функции.Контекст-менеджер потокобезопасный

import time 

def test_run(): 
    time.sleep(1) 


class Update(object): 
    def __init__(self): 
     pass 
    def __enter__(self): 
     print 'enter' 
    def __exit__(self, *_): 
     print 'exit' 

with Update(): 
    test_run() 
+0

Я не вижу никаких проблем с кодом. Я протестировал его и увеличил таймер, добавил несколько операторов печати, и он вел себя так, как ожидалось. – idjaw

ответ

1

Ваш код работает для меня.

import time 
import threading 

def test_run():  
    time.sleep(5) 

def run_update(): 
    with Update(): 
     test_run() 

class Update(object): 
    def __init__(self): 
     pass 
    def __enter__(self): 
     print('enter') 
    def __exit__(self, *_): 
     print('exit') 

if __name__ == "__main__": 
    th = threading.Thread(target=run_update) 
    th.start() 
    for i in range(100): 
     print(i) 

Если вы увеличиваете время сна, это может быть более заметным.

+0

Кажется, что это работает, когда контекст Update() находится в функции. Спасибо за это! Теперь у меня есть более продвинутая вещь, QT не является потокобезопасной, или просто иногда .. – arvidurs

Смежные вопросы