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个回答

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

qq_44837381
qq_44837381 回复LeoWu12306: 从报错来看,是你在一个子进程中等待join另一个子进程(而实际上只能在父进程中join子进程) PS: 建议发完整代码
6 个月之前 回复
LeoWu12306
LeoWu12306 感谢回答! 我更新了问题~
6 个月之前 回复

俗话说“磨刀不误砍柴工”,你这个“工”所需时间也太短了吧,等到磨完刀了,发现人早已徒手解决了。如果你想把这个磨刀的价值体现出来,就得来个更艰难一点的任务。

LeoWu12306
LeoWu12306 感谢回答! 后来更换了更困难的任务,也发现了新问题,已更新~求指导
6 个月之前 回复

多线程是用于单线程比较难完成的任务上面的,并不是所有任务用多线程速度就会提高的,一般的单线程能轻松完成的任务,就不需要多线程了

LeoWu12306
LeoWu12306 回复猫兮ぃCatci: 这是哪一行报错?138么,filename = '/Users/leochow/Documents/到期账号(全).xlsx' 我的138是一个导出文件命名……整个程序都没开始跑,不应该报错吧。
6 个月之前 回复
LeoWu12306
LeoWu12306 Error in atexit._run_exitfuncs: Traceback (most recent call last): File "/Users/leochow/opt/anaconda3/lib/python3.7/multiprocessing/util.py", line 322, in _exit_function p.join() File "/Users/leochow/opt/anaconda3/lib/python3.7/multiprocessing/process.py", line 138, in join assert self._parent_pid == os.getpid(), 'can only join a child process' AssertionError: can only join a child process
6 个月之前 回复
qq_45587822
猫兮ぃCatci 回复LeoWu12306: 能把报错的完整信息打出来吗,比如line多少行
6 个月之前 回复
LeoWu12306
LeoWu12306 感谢回答! 更新了任务,发现了新问题~求指导
6 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐