Asynchronous programming
Steven D'Aprano
steve+python at pearwood.info
Fri Aug 12 20:59:50 EDT 2016
On Fri, 12 Aug 2016 03:47 pm, Paul Rudin wrote:
> Steven D'Aprano <steve+python at pearwood.info> writes:
>
>> Thanks to everyone who has answered, I think I'm slowly starting to get
>> it now. Let's see if we can come up with a toy example that doesn't
>> involve low-level socket programming :-)
>>
>> Let me simulate a slow function call:
[...]
> They're not separate processes or threads, just think tasks that suspend
> and restart cooperatively. You need some kind of event loop to
> orchestrate running the tasks. Asyncio provides one.
>
> You can do your example like this:
>
> import asyncio, random
>
> async def work(id):
> print("starting with id", id)
> workload = random.randint(5, 15)
> for i in range(workload):
> await asyncio.sleep(0.2) # pretend to do some real work
> print("processing id", id) # let the user see some progress
> print("done with id", id)
> return 10 + id
>
> loop = asyncio.get_event_loop()
>
> pending = [1, 2, 3, 4]
>
> jobs = [asyncio.ensure_future(work(n)) for n in pending]
>
> loop.run_until_complete(asyncio.gather(*jobs))
>
> loop.close()
That is *awesome*. Thank you for the example!
--
Steve
“Cheer up,” they said, “things could be worse.” So I cheered up, and sure
enough, things got worse.
More information about the Python-list
mailing list