【发布时间】:2017-08-13 06:13:11
【问题描述】:
老实说,我什至不知道给这个问题起什么名字。我正在尝试遍历大量 URL,但一次只处理 20 个 URL(20 个基于我拥有的代理数量)。但在处理 URL 时,我还需要继续遍历代理列表。因此,例如,它将从第一个 URL 和第一个代理开始,一旦它到达第 21 个 URL,它将再次使用第一个代理。这是我下面的糟糕示例,如果有人能指出我正确的方向,将不胜感激。
import pymysql.cursors
from multiprocessing import Pool
from fake_useragent import UserAgent
def worker(args):
var_a, id, name, content, proxy, headers, connection = args
print (var_a)
print (id)
print (name)
print (content)
print (proxy)
print (headers)
print (connection)
print ('---------------------------')
if __name__ == '__main__':
connection = pymysql.connect(
host = 'host ',
user = 'user',
password = 'password',
db = 'db',
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor
)
ua = UserAgent()
user_agent = ua.chrome
headers = {'User-Agent' : user_agent}
proxies = [
'xxx.xxx.xxx.xxx:xxxxx',
'xxx.xxx.xxx.xxx:xxxxx',
'xxx.xxx.xxx.xxx:xxxxx',
'xxx.xxx.xxx.xxx:xxxxx',
'xxx.xxx.xxx.xxx:xxxxx',
'xxx.xxx.xxx.xxx:xxxxx',
'xxx.xxx.xxx.xxx:xxxxx',
'xxx.xxx.xxx.xxx:xxxxx',
'xxx.xxx.xxx.xxx:xxxxx',
'xxx.xxx.xxx.xxx:xxxxx',
'xxx.xxx.xxx.xxx:xxxxx',
'xxx.xxx.xxx.xxx:xxxxx',
'xxx.xxx.xxx.xxx:xxxxx',
'xxx.xxx.xxx.xxx:xxxxx',
'xxx.xxx.xxx.xxx:xxxxx',
'xxx.xxx.xxx.xxx:xxxxx',
'xxx.xxx.xxx.xxx:xxxxx',
'xxx.xxx.xxx.xxx:xxxxx',
'xxx.xxx.xxx.xxx:xxxxx'
]
with connection.cursor() as cursor:
sql = "SELECT id,name,content FROM table"
cursor.execute(sql)
urls = cursor.fetchall()
var_a = 'static'
data = ((var_a, url['id'], url['name'], url['content'], proxies[i % len(proxies)], headers, connection) for i, url in enumerate(urls))
proc_num = 20
p = Pool(processes=proc_num)
results = p.imap(worker, data)
p.close()
p.join()
【问题讨论】:
标签: python loops proxy multiprocessing python-requests