Python tkinter上的异步数据处理-多回路块
我有一个使用tkinter应用程序类(class App(tk.tk))的基本窗口应用程序。 要触发运行的代码的基础具有以下代码:Python tkinter上的异步数据处理-多回路块,python,pandas,multithreading,asynchronous,tkinter,Python,Pandas,Multithreading,Asynchronous,Tkinter,我有一个使用tkinter应用程序类(class App(tk.tk))的基本窗口应用程序。 要触发运行的代码的基础具有以下代码: loop = asyncio.new_event_loop() asyncio.set_event_loop(loop) app = App(loop) loop.run_forever() 应用程序的启动部分包含以下内容,其中包含更新程序函数的循环创建任务: def __init__(self, loop, interval=0.05): sup
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
app = App(loop)
loop.run_forever()
应用程序的启动部分包含以下内容,其中包含更新程序函数的循环创建任务:
def __init__(self, loop, interval=0.05):
super().__init__()
self.loop = loop
self.protocol("WM_DELETE_WINDOW", self.close)
self.update_task = loop.create_task(self.updater(interval))
async def updater(self, interval):
while True:
self.update()
await asyncio.sleep(interval)
更新程序函数:
def __init__(self, loop, interval=0.05):
super().__init__()
self.loop = loop
self.protocol("WM_DELETE_WINDOW", self.close)
self.update_task = loop.create_task(self.updater(interval))
async def updater(self, interval):
while True:
self.update()
await asyncio.sleep(interval)
一个按钮触发启动另一个文件中的连接,该文件处理websocket数据的接收和处理。在多次迭代尝试不同的方法后,我坚持使用线程,因为它似乎执行得最快。
更新:删除了未正确使用的线程,结果与调用函数相同
def start_connection():
data_connection.main()
然后打开websocket,创建一个循环,从缓冲区中提取数据,并使用下面的所有消息。不确定这是否是最好的方法,但这是我坚持的方法,因为它没有阻止GUI
sem = asyncio.Semaphore(1000)
async def stream_loop():
async with sem:
asyncio.ensure_future(stream_loop())
await stream_process()
asyncio.ensure_future(stream_loop())
我遇到的问题是,我希望在间隔上运行统计信息摘要计算,而不是对收到的每一条消息都运行统计信息摘要计算,使用下面的方法它可以工作,但是它似乎会阻止消息在摘要统计信息处理时被接收并添加到数据帧中:
async def recalculate_loop():
async def refresh():
await recalculate_market_stats()
await asyncio.sleep(1)
await refresh()
await refresh()
asyncio.ensure_future(recalculate_loop())
有没有办法在CPU中使用多个内核异步并行运行这些多进程?或者它已经在后端以尽可能快的速度运行,并且没有任何区别?我认为您有一个最常见的错误-
target=
需要函数名,而不需要()
-所谓的回调
-稍后它将使用()
要在单独的线程中运行它。@furas-I删除了代码的踩踏部分,只需通过data_connection.main()启动连接即可。