twisting基于带有GTK的twisted延迟线程
项目描述
需求
为了有效使用twisting,需要除了twisted库之外的GTK。然后我们必须在应用程序的主要入口文件开头执行以下导入
# twisted install from twisted.internet import gtk2reactor # install the gtk2 reactor gtk2reactor.install() # twisted import from twisted.internet import reactor
在我们用传统的GTK主线程启动应用程序之前
# gtk线程启动 gtk.main()
现在我们使用twisted反应器启动,如下所示
# twisted reactor start reactor.run()
注意: 主图形窗口必须在反应器启动之前创建,就像GTK一样。
框架概述
twisting框架的GUI部分提供以下功能
- 1. 显示任务进度的GUI元素
taskbox对象:附加到任务,以通知任务进度
进度窗口:包含所有可以隐藏的任务框
进度框:可以在父窗口中使用,以通知平均进度
- 2. 管理多个任务
添加任务:创建一个线程和一个taskox附加到工作方法
暂停/播放任务:由框架自动管理
停止任务:将标志返回到主循环
从进度窗口中删除任务框(自动停止)
注意:每个任务都与一个显示任务进度状态的GUI小部件相对应
- 3. 回调
结果回调:在添加任务时设置,并在twisted延迟线程工作循环结束时由它调用
错误回调:在添加任务时设置,并由twisted延迟线程在发生错误时调用
所有任务完成回调:当所有任务完成时由进度窗口调用,可用于消息显示、进度窗口隐藏等
框架最佳实践
在这里,我们将逐步解释框架的标准用法。
- 1. 创建进度窗口
进度窗口是单例模式,必须在反应器启动之前或使用以下行在 gtk 工作流中创建:
# progress window import from twisting import ProgressManager # Progress manager init ProgressManager(all_finish_callback=on_all_tasks_finished, ui=True)
- 2. 设置进度条以获取更多信息
进度条可以添加到任何地方,并且将被进度窗口更新以显示平均进度,这取决于当前正在进行的任务。为此,我们创建进度框并将其设置到进度窗口中:
# progress box import from twisting.gui_worker import ProgressManager import gtk # create the box progress_bar = gtk.ProgressBar() # add the box ProgressManager().set_parent(self.main_window, progress_bar)
注意: 我们更喜欢将进度窗口设置为父级,以便使用 gtk 的短暂功能
- 3. 添加新任务
我们使用添加功能将任务添加到进度窗口。线程和任务框将由进度窗口创建、附加并自动启动。
# add the task ProgressManager().add_task( id_, pretty_name, self.task_function, end_callback=self.end_callback, error_callback=self.error_callback)
一些细节
id_ 对应于任务的唯一标识符
pretty_name 将在任务框小部件中显示
task_function 是使用 twisted 线程化的函数,它应根据 twisting 框架 API 管理任务循环
end_callback 是 twisted 接收 task_function 结果的回调
error_callback 是 twisted 接收参数中的 twisted 对象失败的错误回调
- 4. 线程化任务循环函数
循环函数接收相应的任务框作为参数。然后我们必须通知任务框迭代次数以初始化正确的进度比例
# set the number of iterations taskbox.set_max_pulse(100)
为了隐藏最大程度的线程管理,我们将使用框架提供的 state_method。它应该如下导入:
# state_machine function import from twisting import state_machine
对于每个任务迭代,此方法将更新进度信息,检查 Pause 或 Stop 事件。线程暂停直接在该函数中管理。如果捕获到 Stop 事件,则函数返回 True,这意味着线程化函数必须退出。必须使用任务框实例调用此方法以轮询任务框事件队列:
# IN THE LOOP # check for stop or pause events if state_machine(taskbox): # we quit return stop_result
最后,我们通过 twisted 线程调用任务框完成方法,以停止任务框中的进度并显示结束消息。然后我们返回工作结果,twisted 将将其发送到结果回调
# call the finish action throw the parent event queue reactor.callFromThread(taskbox.finish) # we finish return end_result
项目详情
下载文件
下载您平台上的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源分布
构建分布
twisting-0.6.3-py2.5.egg 的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | ea71ffc63ab8ff0225a959fbd89bec61cf7c2d5ebbb3b2042f9362b853d9d590 |
|
MD5 | dff64063ade1158070cbdfecf45b8037 |
|
BLAKE2b-256 | 47cd55a6030dc7dd57bc1ee888beedfc57bccc6bc2c1892d6ae91b5ffb46e4d2 |