ฉันพบ puf เท่านั้น (ตัวเรียก URL แบบขนาน) แต่ฉันไม่สามารถอ่าน URL จากไฟล์ได้ สิ่งที่ต้องการ
puf < urls.txt
ไม่ทำงานเช่นกัน
ระบบปฏิบัติการที่ติดตั้งบนเซิร์ฟเวอร์คือ Ubuntu
ฉันพบ puf เท่านั้น (ตัวเรียก URL แบบขนาน) แต่ฉันไม่สามารถอ่าน URL จากไฟล์ได้ สิ่งที่ต้องการ
puf < urls.txt
ไม่ทำงานเช่นกัน
ระบบปฏิบัติการที่ติดตั้งบนเซิร์ฟเวอร์คือ Ubuntu
คำตอบ:
ใช้GNU ขนาน ,
$ ขนาน -j $ {jobs} wget <urls.txt
หรือxargs
จากGNU Findutils ,
$ xargs -n 1 -P $ {jobs} wget <urls.txt
โดยที่${jobs}
เป็นจำนวนสูงสุดของwget
คุณต้องการอนุญาตให้ทำงานพร้อมกัน (การตั้งค่า-n
เพื่อ1
ให้ได้หนึ่งwget
การร้องขอต่อบรรทัดในurls.txt
) โดยไม่ต้อง-j
/ -P
, parallel
จะทำงานเป็นงานจำนวนมากในเวลาที่เป็นแกน CPU (ซึ่งไม่จำเป็นต้องทำให้ความรู้สึกสำหรับwget
ผูกพันตามเครือข่าย IO) และxargs
จะทำงานในช่วงเวลาหนึ่ง
ฟีเจอร์ที่ดีอย่างหนึ่งที่parallel
มีมากกว่าxargs
คือการแยกเอาท์พุทของงานที่รันพร้อมกัน แต่ถ้าคุณไม่สนใจสิ่งxargs
นั้นมีแนวโน้มที่จะถูกติดตั้งไว้ล่วงหน้า
jobs
ขึ้นอยู่กับปัจจัยหลายอย่าง: เวลาแฝงของพา ธ , แบนด์วิดท์ของพา ธ , นโยบายเซิร์ฟเวอร์ระยะไกล ฯลฯ
aria2 ทำสิ่งนี้
http://sourceforge.net/apps/trac/aria2/wiki/UsageExample#Downloadfileslistedinafileconcurrently
ตัวอย่าง: aria2c http://example.org/mylinux.iso
คุณสามารถใช้สิ่งนั้นได้โดยใช้ Python และ pycurl library ไลบรารี pycurl มีอินเทอร์เฟซ "หลาย" ที่ใช้การวนซ้ำของตัวเองที่เปิดใช้งานการเชื่อมต่อหลายรายการพร้อมกัน
อย่างไรก็ตามอินเทอร์เฟซนั้นค่อนข้าง C-like และค่อนข้างยุ่งยากเมื่อเทียบกับรหัสอื่น ๆ "Pythonic" มากกว่า
ฉันเขียน wrapper ของมันเพื่อสร้างไคลเอนต์ที่เหมือนเบราว์เซอร์ที่สมบูรณ์ยิ่งขึ้น คุณสามารถใช้มันเป็นตัวอย่าง ดูpycopia.WWW.client module HTTPConnectionManager ล้อมหลายอินเตอร์เฟส
วิธีนี้ใช้งานได้และจะไม่ใช้ DoS ในพื้นที่หรือระยะไกลด้วยการปรับที่เหมาะสม
(bandwidth=5000 jobs=8; \
parallel \
--round \
-P $jobs \
--nice +5 \
--delay 2 \
--pipepart \
--cat \
-a urls.txt \
wget \
--limit-rate=$((bandwidth/jobs))k \
-w 1 \
-nv \
-i {} \
)
ส่วนหนึ่งของหน้า man GNU Parallel มีตัวอย่างของ wget แบบขนานซ้ำ
https://www.gnu.org/software/parallel/man.html#EXAMPLE:-Breadth-first-parallel-web-crawler-mirrorer
HTML ถูกดาวน์โหลดสองครั้ง: หนึ่งครั้งสำหรับการแยกลิงก์และอีกครั้งสำหรับการดาวน์โหลดไปยังดิสก์ เนื้อหาอื่น ๆ จะถูกดาวน์โหลดเพียงครั้งเดียว
หากคุณไม่ต้องการคำตอบที่ซ้ำซากจำเจของคำตอบก็ดูเหมือนชัดเจน
ผู้ที่ตกเป็นเหยื่อของการดาวน์โหลด paralell ของคุณจะไม่สนุก: พวกเขาคาดหวังว่าการเชื่อมต่อหนึ่งครั้งเพื่อให้บริการลูกค้าแต่ละรายการตั้งค่าการเชื่อมต่อต่างๆหมายถึงลูกค้าโดยรวมที่น้อยลง (เช่นนี้ถือเป็นพฤติกรรมที่หยาบคาย)