(19)中华人民共和国国家知识产权局
(12)发明专利申请
(10)申请公布号 (43)申请公布日 (21)申请号 202111531713.7
(22)申请日 2021.12.15
(71)申请人 北京基智科技有限公司
地址 100000 北京市朝阳区北苑路乙108号
6幢一层10号
(72)发明人 李自强 高鹏飞 
(74)专利代理机构 深圳市兰锋盛世知识产权代
理有限公司 44504
代理人 吴巧华
(51)Int.Cl.
G06F  9/48(2006.01)
G06F  9/54(2006.01)
G06F  9/451(2018.01)
(54)发明名称
基于PHP的异步任务进度计算方法
(57)摘要
本发明涉及计算机编程技术领域,且公开了
基于PHP的异步任务进度计算方法,包括以下步
骤:创建一个基于Windows的应用程序,在窗体中
创建一个BackgroundWorker,添加异步事件处理
程序,任务监控中心。本发明通过采用本算法,可
以让用户无需等待大数据量导入/导出任务完
成,节省了用户的时间提高了用户体验,到进度
达到100%时,以邮件的形式通知用户大数据量
导入任务执行完成。若在进度达到80%时程序发
生错误,下次任务监控中心重新启动后,可以从
80%进度继续计算,该进程将数据写入Redis的
队列中,该进程将进度任务ID返回给用户并告知
用户该任务在后台执行,
无需等待。权利要求书2页  说明书4页CN 114281496 A 2022.04.05
C N  114281496
A
1.基于PHP的异步任务进度计算方法,其特征在于,包括以下步骤:创建一个基于Windows的应用程序,在窗体中创建一个BackgroundWorker,添加异步事件处理程序,任务监控中心,异步进程通信和排队计算,添加进度报告和取消支持;
(1)创建一个基于Windows的应用程序
创建一个基于Windows的应用程序项目,
右击“Form1”,然后从快捷菜单中选择“重命名”,将文件名进行修改,当询问是否希望重命名对代码元素“Form1”的所有引用时,单击“是”按钮,
从“工具箱”中将一个控件拖到窗体上,在对其属性进行修改,并对其进行添加控件,在对其控件进行重命名,将其中一个控件拖到窗体上,
(2)在窗体中创建一个BackgroundWorker
利用“Windows窗体设计器”为异步操作创建BackgroundWorker,
从“工具箱”的“组件”选项卡中,将一个BackgroundWorker拖动到窗体上,
添加异步事件处理程序
现在已准备好为BackgroundWorker组件的异步事件添加事件处理程序。这些事件处理程序将调用在后台运行的计算斐波那契数列的耗时操作:
一、在“属性”窗口中的BackgroundWorker组件仍处于选中状态时,单击“事件”按钮。双击DoWork和RunWorkerCompleted事件来创建事件处理程序。有关如何使用事件处理程序的更多信息
二、在窗体中创建一个新方法,此方法完成实际的工作,并在后台运行,这些代码演示了斐波那契数列算法的递归实现,这种算法的效率非常低,对于较大的数值花费的时间按指数增长,在这里使用是出于演示的目的,为了说明在应用程序中某项操作可能带来长时间的延迟,
(4)任务监控中心
任务监控中心是一个常驻内存的PHP进程,它在收到进度任务ID后,从Redis队列中会以每批10000条分批取出数据,执行导入动作并实时计算进度。等到进度达到100%时,以邮件的形式通知用户大数据量导入任务执行完成。若在进度达到80%时程序发生错误,下次任务监控中心重新启动后,可以从80%进度继续计算,
(5)异步进程通信和排队计算
当某用户执行大数据量导入/导出任务时,服务器创建一个PHP‑FPM进程,该进程新建一个进度任务并获取任务唯一标识即进度任务ID,该进度任务ID记录了总的数据量且会通知任务监控中心。而后,该进程将数据写入Redis的队列中,此时,该进程将进度任务ID返回给用户并告知用户该任务在后台执行,无需等待,
(6)添加进度报告和取消支持
由于异步操作将会花费很长的时间,因此通常希望向用户报告进度并允许用户取消操作,BackgroundWorker类提供一种在后台操作进行时允许发送进度消息的事件,它还提供一种允许辅助代码检测到CancelAsync调用并中断自身的标记。
2.根据权利要求1所述的基于PHP的异步任务进度计算方法,其特征在于:所述将大数据量导入/导出任务完成,节省了用户的时间提高了用户体验。
3.根据权利要求1所述的基于PHP的异步任务进度计算方法,其特征在于:所述将任务
监控中心通用化,使得任何导入/导出任务都可以使用,提高了程序的可扩展性。
4.根据权利要求1所述的基于PHP的异步任务进度计算方法,其特征在于:所述在后台运行计算的同时,将会看到显示完成计算的进度,也可以取消未完成的操作。
5.根据权利要求1所述的基于PHP的异步任务进度计算方法,其特征在于:所述在控件的Click事件处理程序中,添加取消异步操作的代码。
6.根据权利要求1所述的基于PHP的异步任务进度计算方法,其特征在于:所述在同时进行的几项操作中使用多个BackgroundWorker对象,针对要调试多线程应用程序,可实现自己的支持异步编程模式的组件。
基于PHP的异步任务进度计算方法
技术领域
[0001]本发明涉及计算机编程技术领域,具体为基于PHP的异步任务进度计算方法。
背景技术
[0002]目前解决大数据量的导入/导出任务时,计算导入进度的方法是采用同步实时计算的方式,例如要导入的数据量为10万,当前进度为百分之几,是在执行的系统进程中实时计算的得出的。
[0003]目前这种计算方法的缺点是让用户等待很长时间,而且容易在长时间执行过程中失败,失败后也无法继续计算,影响客户的实际使用体验,且其在使用后计算失败需要重新操作,导致操作过程复杂,为此本发明推出一种基于PHP的异步任务进度计算方法。
php的工作流程
发明内容
[0004]针对现有技术的不足,本发明提供了基于PHP的异步任务进度计算方法,具备采用本算法,可以让用户无需等待大数据量导入/导出任务完成,节省了用户的时间提高了用户体验,将任务监控中心通用化,使得任何导入/导出任务都可以使用,提高了程序的可扩展性的优点,解决了目前这种计算方
法的缺点是让用户等待很长时间,而且容易在长时间执行过程中失败,失败后也无法继续计算,影响客户的实际使用体验,且其在使用后计算失败需要重新操作,导致操作过程复杂的问题。
[0005]本
[0006]发明提供如下技术方案:基于PHP的异步任务进度计算方法,包括以下步骤:创建一个基于Windows的应用程序,在窗体中创建一个BackgroundWorker,添加异步事件处理程序,任务监控中心,异步进程通信和排队计算,添加进度报告和取消支持;
[0007](1)创建一个基于Windows的应用程序
[0008]创建一个基于Windows的应用程序项目,
[0009]右击“Form1”,然后从快捷菜单中选择“重命名”,将文件名进行修改,当询问是否希望重命名对代码元素“Form1”的所有引用时,单击“是”按钮,
[0010]从“工具箱”中将一个控件拖到窗体上,在对其属性进行修改,并对其进行添加控件,在对其控件进行重命名,将其中一个控件拖到窗体上,
[0011](2)在窗体中创建一个BackgroundWorker
[0012]利用“Windows窗体设计器”为异步操作创建BackgroundWorker,
[0013]从“工具箱”的“组件”选项卡中,将一个BackgroundWorker拖动到窗体上,[0014]添加异步事件处理程序
[0015]现在已准备好为BackgroundWorker组件的异步事件添加事件处理程序。这些事件处理程序将调用在后台运行的计算斐波那契数列的耗时操作:
[0016]一、在“属性”窗口中的BackgroundWorker组件仍处于选中状态时,单击“事件”按钮。双击DoWork和RunWorkerCompleted事件来创建事件处理程序。有关如何使用事件处理
程序的更多信息
[0017]二、在窗体中创建一个新方法,此方法完成实际的工作,并在后台运行,这些代码演示了斐波那契数列算法的递归实现,这种算法的效率非常低,对于较大的数值花费的时间按指数增长,在这里使用是出于演示的目的,为了说明在应用程序中某项操作可能带来长时间的延迟,
[0018](4)任务监控中心
[0019]任务监控中心是一个常驻内存的PHP进程,它在收到进度任务ID后,从Redis队列中会以每批10
000条分批取出数据,执行导入动作并实时计算进度。等到进度达到100%时,以邮件的形式通知用户大数据量导入任务执行完成。若在进度达到80%时程序发生错误,下次任务监控中心重新启动后,可以从80%进度继续计算,
[0020](5)异步进程通信和排队计算
[0021]当某用户执行大数据量导入/导出任务时,服务器创建一个PHP‑FPM进程,该进程新建一个进度任务并获取任务唯一标识即进度任务ID,该进度任务ID记录了总的数据量且会通知任务监控中心。而后,该进程将数据写入Redis的队列中,此时,该进程将进度任务ID 返回给用户并告知用户该任务在后台执行,无需等待,
[0022](6)添加进度报告和取消支持
[0023]由于异步操作将会花费很长的时间,因此通常希望向用户报告进度并允许用户取消操作,BackgroundWorker类提供一种在后台操作进行时允许发送进度消息的事件,它还提供一种允许辅助代码检测到CancelAsync调用并中断自身的标记。
[0024]优选的,所述将大数据量导入/导出任务完成,节省了用户的时间提高了用户体验。
[0025]优选的,所述将任务监控中心通用化,使得任何导入/导出任务都可以使用,提高了程序的可扩
展性。
[0026]优选的,所述在后台运行计算的同时,将会看到显示完成计算的进度,也可以取消未完成的操作。
[0027]优选的,所述在控件的Click事件处理程序中,添加取消异步操作的代码。[0028]优选的,所述在同时进行的几项操作中使用多个BackgroundWorker对象,针对要调试多线程应用程序,可实现自己的支持异步编程模式的组件。
[0029]与现有技术对比,本发明具备以下有益效果:
[0030]1、该基于PHP的异步任务进度计算方法,通过采用本算法,可以让用户无需等待大数据量导入/导出任务完成,节省了用户的时间提高了用户体验,到进度达到100%时,以邮件的形式通知用户大数据量导入任务执行完成。若在进度达到80%时程序发生错误,下次任务监控中心重新启动后,可以从80%进度继续计算,该进程将数据写入Redis的队列中,该进程将进度任务ID返回给用户并告知用户该任务在后台执行,无需等待。
[0031]2、该基于PHP的异步任务进度计算方法,通过将任务监控中心通用化,使得任何导入/导出任务都可以使用,提高了程序的可扩展性。
具体实施方式
[0032]下面将结合本发明实施例,对本发明实施例中的技术方案进行清楚、完整地描述,

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。