Python Asynchronous Programming Fresco Play handson Solution

Learn multithreading and multitasking using Python, it covers coroutines and Tasks, Subprocess, uvloop, and asyncio hands-on excercise.

Lab 1: Welcome to asyncio - Threads

Hands-On - Multithreading

Solution: Hands-On - Multithreading

import threading
 
# Task 1: Create a function `square_it()` which takes a single argument `n` and makes the function print (not return) the square of `n`.
def square_it(n):
  print(n**2)
 
 
# Task 2: Create an another function `do_it()` which takes two integers a and b as arguments and creates two threads targeting `square_it()` function with a and b as argument respectively
def do_it(a, b):
  t1 = threading.Thread(target=square_it, args=(a,))
  t2 = threading.Thread(target=square_it, args=(b,))
 
  # Task 3:  Start the threads to view them in action.
  t1.start()
  t2.start()

Lab 2: Welcome to asyncio - Multiprocessing

Hands-On - Multiprocessing

Solution: fresco play Multiprocessing handson.

 
import multiprocessing
from multiprocessing import Pool
 
# Task 1:  Create a function `calc_it()` that accepts two integers: `start' and `end`. It should then return the sum of all integers between `start' and `end' (including `start' and `end`) and return the resultant value.
 
def calc_it(start, end):
  sum = 0
  for i in range(start,end+1):
      sum +=i
  return sum
 
 
# Task 2: Create an another function `do_it()` that accepts a single integer: `n'. It should return the sum of all integers from 1 to `n' (including and `n`) using multiple processes and also effectively should spawn 4 processes targeting the `calc_it()` function.
 
# Hint: Use the `Pool` class and split the 1 to n range of the `do_it()` function into 4 sub ranges which are the passed to the sub-processes to be used as parameters to the `calc_it()` function.
 
def do_it(n):
    num_processes = 4
    # Calculate the range each process will handle
    chunk_size = (n + num_processes - 1) // num_processes
    ranges = [(i * chunk_size + 1, min((i + 1) * chunk_size, n)) for i in range(num_processes)]
 
    with Pool(processes=num_processes) as pool:
        results = pool.starmap(calc_it, ranges)
    # Sum up the results from all processes
    total_sum = sum(results)
    print(total_sum)
    return total_sum
    
    

Lab 3: Welcome to asyncio - Basic asyncio program

Hands-On - Hands-On - asyncio coroutines

Solution: fresco play Hands-On - asyncio coroutines handson.

import asyncio
 
#Let's try out a basic asyncio program. Make two coroutines (functions with `async`) named `question()` and `answer()'.
 
# Task 1: The question()` should display three questions. After each question, it should await on `answer()` to receive the answer. The answer is the same for all three questions.
 
# The questions that need to be displayed by `question()` are:
# "Is asyncio better for I0 bound programs than the CPU bound ones?"
# "Is async a keyword in the latest Python3?"
# "Is event loop the heart of an asyncio program?"
 
async def question():
    #Complete this coroutine
    print("Is asyncio better for IO bound programs than the CPU bound ones?")
    # await asyncio.sleep(1)
    await answer()
    print("Is async a keyword in the latest Python3?")
    await answer()
    print("Is event loop the heart of an asyncio program?")
    await answer()
 
# Task 2: The `answer()` should contain just a `print()` giving the message "Yes, it is!".
async def answer():
    #Complete this coroutine
    print("Yes, it is!")
 
asyncio.run(question())

    

About the Author

I'm a professor at National University's Department of Computer Science. My main streams are data science and data analysis. Project management for many computer science-related sectors. Next working project on Al with deep Learning.....

إرسال تعليق

Oops!
It seems there is something wrong with your internet connection. Please connect to the internet and start browsing again.
AdBlock Detected!
We have detected that you are using adblocking plugin in your browser.
The revenue we earn by the advertisements is used to manage this website, we request you to whitelist our website in your adblocking plugin.
Site is Blocked
Sorry! This site is not available in your country.