美文网首页
Python DearPyGui 多线程与异步

Python DearPyGui 多线程与异步

作者: 何小有 | 来源:发表于2020-11-26 21:45 被阅读0次

对于一些需要长时间运行的计算和回调,我们可以使用在单线程上运行的异步方法,使用很简单,只需要调用 run_async_function 方法即可,需要注意的是,使用异步命令运行的方法中,不能调用 DearPyGui 的对象与方法。

from dearpygui.core import *
from dearpygui.simple import *
from time import sleep

add_additional_font(file='MicrosoftYaHei.ttf', size=18.0, glyph_ranges='chinese_simplified_common')

def long_async_callback(data, sender):
    run_async_function(long_callback, None)

def long_callback(sender, data):
    sleep(3)

show_logger()
show_metrics()

with window("Tutorial"):
    add_button("耗时方法", callback=long_callback, tip="This will cause a 3 second freeze")
    add_button("耗时异步方法", callback=long_async_callback, tip="This will not freeze")

start_dearpygui()
dearpygui_runasyncfunction.png

异步方法中无法访问 add_dataget_data,因此,当需要将数据传递到异步函方法时,我们必须使用 datareturn_handler 参数,所有的 Python 对象都可以通过 data 参数发送到方法中。此外,通过指定返回回调的 data 输入,可以让异步方法访问任何数据。

from dearpygui.core import *
from dearpygui.simple import *
from time import sleep

add_additional_font(file='MicrosoftYaHei.ttf', size=18.0, glyph_ranges='chinese_simplified_common')

def long_async_preparer(sender, data):
    floaty = get_value("异步输入数据")
    run_async_function(long_callback, floaty, return_handler=long_async_return)

def long_callback(sender, data):
    sleep(3)
    return data * 2

def long_async_return(sender, data):
    log_debug(data)

def long_callback2(sender, data):
    sleep(3)
    log_debug(data * 2)

show_logger()

with window("Tutorial"):
    add_text("输入一个数字,然后在logger窗口中查看回调的输出,该回调通常会使整个GUI冻结")
    add_input_float("异步输入数据", default_value=1.0)
    add_button("耗时方法", callback=long_callback2, callback_data=get_value("异步输入数据"),
               tip="This is the long callback that will freeze the gui")
    add_button("耗时异步方法", callback=long_async_preparer, tip="this will not a freeze the GUI")

start_dearpygui()
dearpygui_asyncreturnhandler.png

当调用异步方法时,将创建一个 线程池,我们可以配置 线程数线程超时时间。通过 set_thread_count 我们可以设置 线程池 中的线程数,也可以通过 set_threadpool_high_performance线程池 的最大线程数设置为计算机的最大值。

需要注意,调用异步方法时,CPU 将以 100% 的速度运行,因此,我们可以通过 set_threadpool_timeout 设置线程池中每个线程的超时时间,这样,在超出设定的时间后,将自动销毁线程并释放资源。

相关文章

  • Python DearPyGui 多线程与异步

    对于一些需要长时间运行的计算和回调,我们可以使用在单线程上运行的异步方法,使用很简单,只需要调用 run_asyn...

  • Python DearPyGui 基础

    Dear PyGui 库用于开发跨平台的 GUI 应用程序,于2020年9月发布,通过对 Dear ImGui[h...

  • Python DearPyGui 进阶

    控件和窗口回调 每个输入控件都有一个回调,该回调在控件交互时运行,回调用于为控件提供功能实现。回调可以在创建时或在...

  • [Python系列]Python多线程

    背景:说到多线程,我们会想到的是:异步编程、同步(锁)、共享变量、线程池等等,那么Python里面多线程是如何实现...

  • iOS面试之多线程模块

    多线程 多线程内容如下: GCD NSOperation NSThread 多线程与锁 1.GCD 同步/异步和串...

  • 一篇文章,搞明白异步和多线程的区别

    最近在研究Spring Boot中的异步处理,发现涉及到异步和多线程的很多知识点,就先写几篇关于异步与多线程的文章...

  • python 多线程异步

    最近做了个爬取代理的爬虫,使用了python的aysncio及concurrent.futures的ThreadP...

  • python装饰器

    最近在学习python3,对于python的装饰器,多线程以及异步IO有点卡顿。这两天在研究python的装饰器,...

  • 多线程

    多线程开发 - 异步 多线程 - 延迟 多线程 - 异步延迟 discardableResult 就是说返回值可以...

  • Gevent高并发网络库精解

    进程 线程 协程 异步 并发编程(不是并行)目前有四种方式:多进程、多线程、协程和异步。 多进程编程在python...

网友评论

      本文标题:Python DearPyGui 多线程与异步

      本文链接:https://www.haomeiwen.com/subject/wmoziktx.html