LeoWu12306 2020-02-22 16:03 采纳率: 0%
浏览 3034

Python 多进程比单进程更慢问题求助

背景:初学Python的菜鸟,没有任何语言基础。目前需求是希望通过Python+Selenium3使用多个账号实现自动操作网页。由于账号数比较多,需要借助多线程/多进程协助。
但是在使用了多进程代码后速度并没有提升,经过检测发现确实是不同进程在操作。经过简化的代码块如下(将网页操作简化为一个简单的系统计算),请各位大大帮忙看看。可以看出,单线程比多线程执行速度更快。


更新内容的分割线

太感谢各位的回答了!没想到周末菜鸟的问题还有这么多回答,感谢各位!
大家的回答主要是说该任务太简单所以没有差距,我后来将任务复杂化了一些,发现多进程在计算确实有一些优势。但是还是发现了几个个问题:

1 在多进程的前提下,同样的任务,我将循环语句写在主任务中和子任务中差距非常之大(循环语句写在母任务后,子任务就没有循环了),差距大概在10~20倍。

2 如果我将循环写在子任务中,在anaconda中的spyder可以运行,但是在vs code 2020中运行,会报错:can only join a child process 请问是什么原因?

3 我的真实需求是:登陆N个账号,在同一个网站上做同样的操作,目前是线性的。即使我写了多进程,发现依旧同一时间只会打开一个浏览器,第二个进程直到第一个把网页操作全部执行完毕才会打开。请问要怎么样才能满足我的需求,同时打开多个浏览器操作?目前i9和64G内存表示内心毫无波动,甚至有一点想笑。

代码块修改为实际需求的简化版本:

# 子进程,所需要执行的任务

# 导入含有账号密码的excel

def MainProcess(i):   
        p = multiprocessing.Pool()

        for key in account.keys():
            #登录网页、页面点击等各种操作


# 主程序
if __name__=='__main__':
        start_time = time.time()
        print('程序开始')
        MainProcess()
        end_time = time.time()
        print('本次耗时',(end_time - start_time),'秒')
  • 写回答

3条回答 默认 最新

  • 九洲歌同 2020-02-23 00:34
    关注

    开启进程本身是耗时的,执行的任务换成消耗几秒的,可能差距就出来了

    评论

报告相同问题?

悬赏问题

  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 spring后端vue前端
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题