(original) (raw)
Excuse my ignorance (or maybe it's a vocabulary thing), but I'm trying to understand the problem here.
--
Christopher Barker, Ph.D.
Oceanographer
Emergency Response Division
NOAA/NOS/OR&R (206) 526-6959 voice
7600 Sand Point Way NE (206) 526-6329 fax
Seattle, WA 98115 (206) 526-6317 main reception
Chris.Barker@noaa.gov
But if I have this right:
I've been using asyncio a lot lately and have encountered this problem several times. Imagine you want to do a lot of queries against a database, spawning 10000 tasks in parallel will probably cause a lot of them to fail.
async is not parallel -- all the tasks will be run in the same thread (Unless you explicitly spawn another thread), and only one task is running at once, and the task switching happens when the task specifically releases itself.
If it matters in what order the tasks are performed, then you should not be using async.
So why do queries fail with 10000 tasks? or ANY number? If the async DB access code is written right, a given query should not "await" unless it is in a safe state to do so.
So what am I missing here???
What you need in a task pool of sorts, to limit concurrency and do only 20 requests in parallel.
still wrapping my head around the vocabulary, but async is not concurrent.
If we were doing this synchronously, we wouldn't spawn 10000 threads using 10000 connections,
and threads aren't synchronous -- but they are concurrent.
we would use a thread pool with a limited number of threads and submit the jobs into its queue.
because threads ARE concurrent, and there is no advantage to having more threads than can actually run at once, and having many more does cause thread-switching performance issues.
To me, tasks are (somewhat) logically analogous to threads.
kinda -- in the sense that they are run (and completed) in arbitrary order, But they are different, and that difference is key to this issue.
As Yury expressed interest in this idea, there must be something I'm missing.
What is it?
-CHB
Christopher Barker, Ph.D.
Oceanographer
Emergency Response Division
NOAA/NOS/OR&R (206) 526-6959 voice
7600 Sand Point Way NE (206) 526-6329 fax
Seattle, WA 98115 (206) 526-6317 main reception
Chris.Barker@noaa.gov