import multiprocessing
import time
import os
import random
def red(q):
while q.qsize():
print("输出的值为(%s)")
def main():
q=multiprocessing.Manager().Queue()
pool=multiprocessing.Pool() # 创建一个空队列,空队列不限大小
for i in range(100):
q.put(i) # 往队列里添加数据
for a in range(2):
pool.apply_async(red,args=(q,)) # 这里的是启动一个异步进程把队列Q传递过去
time.sleep(random.uniform(1,3)) # 这里是做一个1到3秒的随机等待
pool.close() # 这里是执行完之后关闭子进程
pool.join() # 等待所有进程执行完毕
多进程调用pyppeteer
import multiprocessing
import time
import random
import asyncio
from IP_Proxies import Proxies,Authens
from pyppeteer import launch
def red(q):
while q.qsize():
url=q.get(True):
asyncio.get_event_loop().run_until_complete(main(url)) # 启动项目
async def get_pyppeteer(url):
browser = await launch(headless=True, args=['--disable-infobars', "--proxy-server=" + Proxies()]) # headless=True 启动了无头模式,--proxy-server 启动了代理
page = await browser.newPage()
await page.authenticate(Authens()) # 输入代理账号密码
await page.setExtraHTTPHeaders(Proxies()) # 在pyppeteer中和puppeteer是一样的,都不能把隧道加在args里,只能加在headers里
await page.goto(url)
await page.evaluate('''() =>{ Object.defineProperties(navigator,{ webdriver:{ get: () => false } }) }''')
await asyncio.sleep(3)
await page.screenshot({'path':str(name)}) # 截图
print(await page.content())
await asyncio.sleep(3)
await browser.close()
def main():
# 主函数,主要写的进程池
q=multiprocessing.Manager().Queue() # 创建一个空队列
pool=multiprocessing.Pool() # 创建一个进程池
for i in range(5):
q.put(i) # 往进程池里 put 数据
for a in range(2):
pool.apply_async(red,args=(q,)) # 进程异步启动调用 red 函数 ,并把队列传过去
time.sleep(random.uniform(1,3))
pool.close() # 子进程结束,关闭
pool.join() # 等待所有进程结束才结束