如果我 运行 我的 python 代码在同一台电脑上的不同虚拟机上进行多处理,GIL 会干扰吗?
Will GIL interfere if I run my python code with multiprocessing in it on different virual machine on the same pc?
我目前有一个 python 脚本,可以从单个 url 抓取数据。
为了加快进程我在脚本中使用了池多处理模块,为了便于解释,这个脚本被称为"script_one.py"。
脚本它专门做一个"get request"从目标url收集json/html结果并不断切换代理地址,并将结果保存在文本文件中。
我的问题是:
如果我 运行 在多个虚拟机上使用相同的代码 (script_one.py),我是否会进一步加快进程而不会导致 GIL 出现任何问题?
下面是我的代码:
import requests,time,random
from multiprocessing import Pool
def script_one(file_name,from_letter,to_letter):
print('Here it does the get request and collects data')
print('Here it saves on file')
if __name__ == '__main__':
with Pool(5) as p:
print(p.starmap(script_one,[('r_ba', 'r', 'rba'),('rbrca', 'rb', 'rca'),('rcrda', 'rc', 'rda'),
('rdrea', 'rd', 'rea'),('rerfa', 're', 'rfa'),('rfrga', 'rf', 'rga'),
('rgrha', 'rg', 'rha'),('rhria', 'rh', 'ria'),('rirja', 'ri', 'rja'),
('rjrka', 'rj', 'rka'),('rkrla', 'rk', 'rla'),('rlrma', 'rl', 'rma'),
('rmrna', 'rm', 'rna'),('rnroa', 'rn', 'roa'),('rorpa', 'ro', 'rpa'),
('rprqa', 'rp', 'rqa'),('rqrra', 'rq', 'rra'),('rrrsa', 'rr', 'rsa'),
('rsrta', 'rs', 'rta'),('rtrua', 'rt', 'rua'),('rurva', 'ru', 'rva'),
('rvrwa', 'rv', 'rwa'),('rwrxa', 'rw', 'rxa'),('rxrya', 'rx', 'rya'),
('ryrza', 'ry', 'rza'),('rzr0a', 'rz', 'r0a')]))
p.close()
p.join()
目前有多种选择:
- 多重处理
- 多线程
- 并行使用多个虚拟机
- 对于 windows 用户,我还找到了使用多个桌面的好方法(我猜应该对 linux 用户同样有效)
- 您也可以同时手动 运行 多个终端 windows,因为(信用证:@MatteoItalia)在请求期间等待套接字 GIL 被释放。
来源:@MatteoItalia
我目前有一个 python 脚本,可以从单个 url 抓取数据。
为了加快进程我在脚本中使用了池多处理模块,为了便于解释,这个脚本被称为"script_one.py"。
脚本它专门做一个"get request"从目标url收集json/html结果并不断切换代理地址,并将结果保存在文本文件中。
我的问题是: 如果我 运行 在多个虚拟机上使用相同的代码 (script_one.py),我是否会进一步加快进程而不会导致 GIL 出现任何问题?
下面是我的代码:
import requests,time,random
from multiprocessing import Pool
def script_one(file_name,from_letter,to_letter):
print('Here it does the get request and collects data')
print('Here it saves on file')
if __name__ == '__main__':
with Pool(5) as p:
print(p.starmap(script_one,[('r_ba', 'r', 'rba'),('rbrca', 'rb', 'rca'),('rcrda', 'rc', 'rda'),
('rdrea', 'rd', 'rea'),('rerfa', 're', 'rfa'),('rfrga', 'rf', 'rga'),
('rgrha', 'rg', 'rha'),('rhria', 'rh', 'ria'),('rirja', 'ri', 'rja'),
('rjrka', 'rj', 'rka'),('rkrla', 'rk', 'rla'),('rlrma', 'rl', 'rma'),
('rmrna', 'rm', 'rna'),('rnroa', 'rn', 'roa'),('rorpa', 'ro', 'rpa'),
('rprqa', 'rp', 'rqa'),('rqrra', 'rq', 'rra'),('rrrsa', 'rr', 'rsa'),
('rsrta', 'rs', 'rta'),('rtrua', 'rt', 'rua'),('rurva', 'ru', 'rva'),
('rvrwa', 'rv', 'rwa'),('rwrxa', 'rw', 'rxa'),('rxrya', 'rx', 'rya'),
('ryrza', 'ry', 'rza'),('rzr0a', 'rz', 'r0a')]))
p.close()
p.join()
目前有多种选择: - 多重处理 - 多线程 - 并行使用多个虚拟机 - 对于 windows 用户,我还找到了使用多个桌面的好方法(我猜应该对 linux 用户同样有效) - 您也可以同时手动 运行 多个终端 windows,因为(信用证:@MatteoItalia)在请求期间等待套接字 GIL 被释放。
来源:@MatteoItalia