From 1c5dcc009626fd358a4151e7138c893bedfe7a30 Mon Sep 17 00:00:00 2001 From: Jacob Hoffman-Andrews Date: Thu, 22 Oct 2020 22:55:16 -0700 Subject: [PATCH 1/2] Remove some dev-dependencies. We don't really need rayon for the parallelism in smoke-test. Also, now that we use log, smoke-test can just use that. --- Cargo.toml | 4 --- examples/smoke-test/main.rs | 50 +++++++++++++++++++++---------------- 2 files changed, 28 insertions(+), 26 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 703b26e..3ad9ea6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -43,10 +43,6 @@ cookie_store = { version = "0.12.0", optional = true } log = "0.4.11" [dev-dependencies] -serde = { version = "1", features = ["derive"] } -rayon = "1.3.0" -rayon-core = "1.7.0" -chrono = "0.4.11" env_logger = "0.7.1" [[example]] diff --git a/examples/smoke-test/main.rs b/examples/smoke-test/main.rs index 6f0e368..d75dfd2 100644 --- a/examples/smoke-test/main.rs +++ b/examples/smoke-test/main.rs @@ -1,11 +1,10 @@ -use chrono::Local; -use rayon::prelude::*; - use std::io::{self, BufRead, BufReader, Read}; -use std::iter::Iterator; +use std::sync::{Arc, Mutex}; +use std::thread::{self, JoinHandle}; use std::time::Duration; use std::{env, error, fmt, result}; +use log::{error, info}; use ureq; #[derive(Debug)] @@ -23,12 +22,6 @@ impl From for Oops { } } -impl From for Oops { - fn from(e: rayon_core::ThreadPoolBuildError) -> Oops { - Oops(e.to_string()) - } -} - impl error::Error for Oops {} impl fmt::Display for Oops { @@ -39,7 +32,7 @@ impl fmt::Display for Oops { type Result = result::Result; -fn get(agent: &ureq::Agent, url: &String) -> Result> { +fn get(agent: &ureq::Agent, url: &str) -> Result> { let response = agent .get(url) .timeout_connect(std::time::Duration::from_secs(5)) @@ -51,23 +44,36 @@ fn get(agent: &ureq::Agent, url: &String) -> Result> { Ok(bytes) } -fn get_and_write(agent: &ureq::Agent, url: &String) -> Result<()> { - println!("🕷️ {} {}", Local::now(), url); +fn get_and_write(agent: &ureq::Agent, url: &str) { + info!("🕷️ {}", url); match get(agent, url) { - Ok(_) => println!("✔️ {} {}", Local::now(), url), - Err(e) => println!("⚠️ {} {} {}", Local::now(), url, e), + Ok(_) => info!("✔️ {}", url), + Err(e) => error!("⚠️ {} {}", url, e), } - Ok(()) } fn get_many(urls: Vec, simultaneous_fetches: usize) -> Result<()> { let agent = ureq::Agent::default(); - let pool = rayon::ThreadPoolBuilder::new() - .num_threads(simultaneous_fetches) - .build()?; - pool.scope(|_| { - urls.par_iter().map(|u| get_and_write(&agent, u)).count(); - }); + let mutex = Arc::new(Mutex::new(urls)); + let mut join_handles: Vec> = vec![]; + for _ in 0..simultaneous_fetches { + let mutex = mutex.clone(); + let agent = agent.clone(); + join_handles.push(thread::spawn(move || loop { + let mut guard = mutex.lock().unwrap(); + let u = match guard.pop() { + Some(u) => u, + None => return, + }; + + drop(guard); + + get_and_write(&agent, &u); + })); + } + for h in join_handles { + h.join().map_err(|e| Oops(format!("{:?}", e)))?; + } Ok(()) } From 304981377bc5926951ca42f7e425a2a55016b83f Mon Sep 17 00:00:00 2001 From: Jacob Hoffman-Andrews Date: Sat, 24 Oct 2020 10:04:55 -0700 Subject: [PATCH 2/2] Restore serde dev_dependency. --- Cargo.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/Cargo.toml b/Cargo.toml index 3ad9ea6..345e59f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -43,6 +43,7 @@ cookie_store = { version = "0.12.0", optional = true } log = "0.4.11" [dev-dependencies] +serde = { version = "1", features = ["derive"] } env_logger = "0.7.1" [[example]]