2015-10-23 58 views
0

有了这个代码,我希望它应该立即打印“输入”,然后睡觉,然后打印“退出”。 但它一气呵成。 我将如何获得它的工作?现在它锁定主应用程序,所以理想情况下我想在单独的线程中运行被调用的函数。但是然后立即打印“进入”和“退出”,并在睡眠计时器之后进行函数调用。上下文管理器线程安全

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