背景:初学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),'秒')