toga 异步处理

from concurrent import futures

import toga
from toga.style import Pack
from toga.style.pack import COLUMN, CENTER
import asyncio
import time

def sync_function1(name = 'bbb'):
    print(f"开始执行同步函数,name: {name}")
    time.sleep(2)
    print("同步函数执行完成")
    return "执行结果"

def func(x):
    print(x['data'])
    time.sleep(0.5)

def sync_function2():
    print(f"开始执行异步函数")
    lst = [
        {
            'data':'1'
        },
        {
            'data': '2'
        },
        {
            'data': '3'
        }
    ]
    with futures.ThreadPoolExecutor(max_workers = 4) as executor:
        result = executor.map(func, lst)
        for r in result:
            pass
    print("异步函数执行完成")
    return "执行结果"

class AsyncApp(toga.App):
    async def button_handler(self, _):
        await asyncio.to_thread(sync_function1, 'aaa')
        await asyncio.to_thread(sync_function1)
        await asyncio.to_thread(sync_function2)

    def startup(self):
        button = toga.Button(
            '执行耗时任务',
            on_press = self.button_handler,
            style = Pack(padding = 50)
        )
        box = toga.Box(
            children = [button],
            style = Pack(direction = COLUMN, alignment = CENTER)
        )
        self.main_window = toga.MainWindow(title = self.formal_name)
        self.main_window.content = box
        self.main_window.show()


def main():
    return AsyncApp('Async Toga App', 'org.example.asynctogaapp')


if __name__ == '__main__':
    main().main_loop()

  


 

posted @ 2025-04-18 16:37  Hany47315  阅读(22)  评论(0)    收藏  举报