Python sns catplot结果函数打印外部装饰器计时器函数

Python sns catplot结果函数打印外部装饰器计时器函数,python,decorator,Python,Decorator,我有很好的工作能力。很长,但开头是: from timer import timer @timer def Klasse3(): while True: jaar = input('Welk jaar wil je zien: ') try: jaar = int(jaar) except ValueError: print ('Er ging iets mis: het li

我有很好的工作能力。很长,但开头是:

from timer import timer

@timer
def Klasse3():
    
    while True:
        jaar = input('Welk jaar wil je zien: ')
        try:
           jaar = int(jaar)    
        except ValueError:
           print ('Er ging iets mis: het lijkt er op dat je geen jaartal invoerde.')    
           continue
        if 2017 <= jaar < 2020:  
            print(f'{jaar} is beschikbaar in de database. Een klein moment geduld a.u.b.')
            print('Processing request......')
            break
        else:
            print ('Helaas, alleen de jaren 2017,2018 en 2019 zijn beschikbaar.')
从开头可以看出,我使用了一个装饰器:@timer:

import sys
import time
import functools

def timer(func):
    """Print the runtime of the decorated function"""
    @functools.wraps(func)
    def wrapper_timer(*args, **kwargs):
        start_time = time.perf_counter()    # 1
        value = func(*args, **kwargs)
        end_time = time.perf_counter()      # 2
        run_time = end_time - start_time    # 3
        print(f"Deze functie nam {run_time:.2f} seconden in beslag.")
        print('Dank u wel voor het gebruiken van onze online analyse tool. Graag tot een volgende keer.')
    
        return value
    return wrapper_timer
功能和装饰都很好。功能上没有问题。但是seaborn地块(效果也很好)在我的计时器装饰器中的最终打印之后打印。这很奇怪,不应该也是。 函数应该运行(在计时器装饰器内部),完成完整的函数后,计时器装饰器应该打印:此函数需要。。。。秒和谢谢打印

但相反,计时器功能的最后一部分在SNS绘图之前打印,如下图所示。 我能做些什么(Jupiter笔记本)让sns打印在正确的地方?那么,带秒和谢谢的句子(荷兰的dank u wel等)在情节结束后打印出来? 提前谢谢,简

在贝斯拉格的第二场比赛中,德兹·芬斯蒂·南14.08秒

这是一个在线分析工具。格拉格·托恩·沃根德·科尔


matplotlib图形显示在单独的线程中。大多数图形软件包都是这样绘制的。主线程中的计时器和打印输出不受显示线程处理的影响。

绘图在单独的线程中绘制。线程和图形一般都是这样工作的。我不确定我能帮到更多的忙。不用担心,很高兴你找到了答案!谢谢我添加了一个答案,如果有帮助的话,请您接受。
import sys
import time
import functools

def timer(func):
    """Print the runtime of the decorated function"""
    @functools.wraps(func)
    def wrapper_timer(*args, **kwargs):
        start_time = time.perf_counter()    # 1
        value = func(*args, **kwargs)
        end_time = time.perf_counter()      # 2
        run_time = end_time - start_time    # 3
        print(f"Deze functie nam {run_time:.2f} seconden in beslag.")
        print('Dank u wel voor het gebruiken van onze online analyse tool. Graag tot een volgende keer.')
    
        return value
    return wrapper_timer