Foxtable(狐表)用户栏目专家坐堂 → [求助]多线程的问题


  共有5546人关注过本帖树形打印复制链接

主题:[求助]多线程的问题

帅哥,在线噢!
有点蓝
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106273 积分:540494 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/2/15 21:52:00 [显示全部帖子]

看:http://www.foxtable.com/mobilehelp/scr/277.htm

可以同时开12个线程,分别计算一个月的数据;或开4个线程,计算4个季度的数据

 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106273 积分:540494 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/2/15 22:26:00 [显示全部帖子]

就是这个意思。

如果数据量比较大,1-11月每月一个线程同时进行统计,全部统计后再加总,第4季度就是10-11月这2个月的计算结果汇总

如果数据量相对较小,按季度开线程计算即可

 回到顶部
帅哥,在线噢!
有点蓝
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106273 积分:540494 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/2/15 22:40:00 [显示全部帖子]

原理都是一样的啊,不管是按月,或是按品类、品牌。供应商....目的其实就是把把数据分成可以独立计算的小单位,放到线程里计算,然后再汇总。比如每1000个品类一个线程、某个供应商的品类一个线程、......

也可以每个月初把上个月的数据统计出来,把结果记录到表中,以后直接取计算结果,不需要每次都重新统计一次.........

方法有很多,达到目的就行,至于这个方法能不能用,试过才知道

 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106273 积分:540494 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/2/16 12:15:00 [显示全部帖子]

具体问题具体分析。如果如果这些品类都是各自计算,和其他品类没有交互,不需要什么全局变量、同步函数,直接计算把结果写入数据库即可。

如果是按月份计算,然后需要汇总,看看这个:http://www.foxtable.com/mobilehelp/scr/3270.htm,原理一样的

 回到顶部
帅哥,在线噢!
有点蓝
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106273 积分:540494 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/2/16 17:12:00 [显示全部帖子]

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:多线程处理数据.zip


 回到顶部
帅哥,在线噢!
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106273 积分:540494 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/2/18 11:39:00 [显示全部帖子]

11楼的方法计算出来的结果有错误 -- 那是因为我不知道您的计算逻辑,随便写的条件。根据自己需要改正确

 回到顶部
帅哥,在线噢!
有点蓝
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106273 积分:540494 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/2/18 11:53:00 [显示全部帖子]

看看:http://www.foxtable.com/mobilehelp/scr/277.htm,请认真看一看帮助,异步函数里是不能操作更新界面的表格的。这是为什么我使用了sqlselect的原因,异步函数只能操作后台数据库

 回到顶部
帅哥,在线噢!
有点蓝
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106273 积分:540494 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/2/18 16:08:00 [显示全部帖子]

一样不行。请直接操作后台数据库

您可以给这个表加上一个序号列,可以根据这个序号分批处理后台数据,就方便一点
[此贴子已经被作者于2019/2/18 16:11:09编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106273 积分:540494 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/2/18 17:09:00 [显示全部帖子]

我不明白您的业务处理模式,无法回答。最好做一个能够实现您的完整意图的实例发上来看看,包含各种过程可以正常使用的测试数据。

调整的量,移交的量为什么就不能存储?就算是使用的别人的系统,别人不存储,您也可以通过计算后自己存储起来,方便以后直接使用。其实没有多少真正意义上的统计数据是需要即时统计的,特别是大型系统,往往都是分散到各个时间点,各个步骤中进行处理,然后需要的时候,把历史的统计数据合并到最新那部分没有做统计的数据的统计结果即可。

 回到顶部
帅哥,在线噢!
有点蓝
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106273 积分:540494 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/2/20 23:25:00 [显示全部帖子]

TbGoods表显示为一片空白,原因:http://www.foxtable.com/webhelp/scr/1906.htm

这个貌似也就是是一些既有数据的汇总而已,没看到需要做什么二次加工,没有必要什么多线程吧。直接一条sql语句就行了

Select a.id,a.code,b.AlterA  As TotalAlterA  from TbGoods As a  
    left join (Select GoodsID,sum(AlterA) As AlterA 
        from TbAlter where [Date] >= #2018-02-01# And [Date] < #2018-03-01# group by GoodsID ) As b 
    on a.ID= b.GoodsID

TbRK表没有数据,也没有看到有日期列,所以没有处理,自己参考上面TbAlter 的方式做即可,如

Select a.id,a.code,b.AlterA  As TotalAlterA,c.CurA   from TbGoods As a  
    left join (Select GoodsID,sum(AlterA) As AlterA 
        from TbAlter where [Date] >= #2018-02-01# And [Date] < #2018-03-01# group by GoodsID ) As b 
    on a.ID= b.GoodsID
    left join (Select GoodsID,sum(A) As CurA 
        from TbRK where [Date] >= #2018-02-01# And [Date] < #2018-03-01# group by GoodsID  ) As c 
    on a.ID= c.GoodsID

 回到顶部
总数 20 1 2 下一页