影刀RPA流程并行执行:同时跑多个任务提升效率
作者:林焱
默认情况下影刀流程是顺序执行的——一个任务跑完才跑下一个。如果有10个独立任务,一个个排队跑,总时间就是10个任务时间之和。
但如果这10个任务相互独立,完全可以同时跑,总时间就只是最慢那个任务的时间。这就是并行执行的价值。
一、影刀的并行执行方式
方式一:多实例运行
同时打开多个影刀实例,每个实例跑一个独立流程。
适合:任务间完全独立,各自使用不同的浏览器窗口。
方式二:异步子流程调用
在一个流程里,同时异步调用多个子流程,主流程等待所有子流程完成后继续。
方式三:多浏览器窗口
一个流程里同时操作多个浏览器实例,每个处理不同的任务。
二、什么任务适合并行
适合并行的任务特征:
- 相互独立:任务A的结果不依赖任务B
- 资源不冲突:不会同时写同一个文件
- 有等待时间:任务本身包含大量等待(如网络加载),并行能有效利用等待时间
不适合并行的任务:
- 任务之间有数据依赖
- 都在操作同一个 Excel 文件
- 都在操作同一个浏览器窗口
三、实战:并行采集多个网站
场景:需要同时采集3个不同网站的数据,每个网站采集约3分钟。串行需要9分钟,并行只需要3分钟多。
方案:同时启动多个浏览器窗口
// 新建三个浏览器实例,分别用变量区分 浏览器A = 新建浏览器实例() 浏览器B = 新建浏览器实例() 浏览器C = 新建浏览器实例() // 在浏览器A里打开第一个网站 在指定浏览器中打开URL(浏览器A, "https://site-a.com") // 在浏览器B里打开第二个网站 在指定浏览器中打开URL(浏览器B, "https://site-b.com") // 在浏览器C里打开第三个网站 在指定浏览器中打开URL(浏览器C, "https://site-c.com") // 等待所有浏览器加载完毕  等待元素出现(浏览器A, ".content-loaded") 等待元素出现(浏览器B, ".content-loaded") 等待元素出现(浏览器C, ".content-loaded") // 从三个浏览器里各自采集数据 结果A = 从浏览器采集(浏览器A) 结果B = 从浏览器采集(浏览器B) 结果C = 从浏览器采集(浏览器C) // 合并结果 全部结果 = 结果A + 结果B + 结果C 写入Excel(全部结果)四、多实例并行的操作方法
如果影刀支持多实例(企业版功能),可以同时启动多个影刀进程:
- 把大任务列表拆成 N 份
- 同时启动 N 个影刀实例,每个实例处理一份任务
- 每个实例把结果写入带序号的不同文件
- 所有实例完成后,用一个汇总流程合并结果
五、并行时的资源冲突处理
并行执行时最常见的问题是写文件冲突——多个任务同时写同一个 Excel 会出错。
解决方案:每个任务写独立文件
任务ID = 获取流程参数("task_id") // 区分不同任务的标识 // 写入带任务ID的独立文件 输出路径 = "D:\结果\结果_" + 任务ID + ".xlsx" 写入Excel(数据, 输出路径)所有任务完成后,用合并流程把多个结果文件合并:
// 汇总流程 结果文件列表 = 获取文件夹所有文件("D:\结果\", "结果_*.xlsx") ForEach 文件 in 结果文件列表: 数据 = 读取Excel(文件) 追加写入汇总Excel(数据) 删除临时文件(结果文件列表)六、性能提升的实际效果
| 任务类型 | 串行时间 | 并行时间 | 提升 |
|---|---|---|---|
| 采集10个独立网站 | 30分钟 | 5分钟(6并行) | 6x |
| 处理100个Excel文件 | 20分钟 | 4分钟(5并行) | 5x |
| 发送100封邮件 | 10分钟 | 2分钟(5并行) | 5x |
并行的实际效果取决于任务的独立性和资源限制(CPU/内存/网络带宽)。
七、注意事项
- 并行数不要过多:浏览器占用内存大,同时开太多会导致电脑卡死,建议最多3-5个
- 确认任务真正独立:并行前仔细检查任务之间有没有数据依赖
- 出错处理更复杂:并行时一个任务失败不会影响其他任务,但最终汇总时需要识别哪些成功哪些失败
并行是提升自动化效率的重要手段。对于那些"等来等去"的采集任务,并行能把效率翻几倍。
作者:林焱