search
HomeBackend DevelopmentPython TutorialHow to create and run asynchronous tasks in Python

    1. What is an asynchronous task

    Asynchronous task is an object that schedules and runs an asyncio coroutine independently. It provides a handle to the dispatched coroutine that asyncio programs can query and use to interact with the coroutine.

    Tasks are created from coroutines. It takes a coroutine object, wraps the coroutine, schedules it for execution, and provides methods to interact with it. Tasks are executed independently. This means that it is scheduled in the asyncio event loop and will execute regardless of what happens in the coroutine that created it. This is different from executing the coroutine directly, where the caller must wait for it to complete.

    The asyncio.Task class extends the asyncio.Future class, an instance is awaitable. Future is a lower-level class that represents the result that will eventually arrive. Classes that extend the Future class are often called Future-like.

    Because asynchronous tasks are awaitable, this means that the coroutine can use await expressions to wait for the task to complete.

    ...
    # wait for a task to be done
    await task

    Now that we know what an asyncio task is, let’s see how to create one.

    2. How to create a task

    Create a task using the provided coroutine instance. Recall that a coroutine is defined using an async def expression and looks like a function.

    # define a coroutine
    async def task_coroutine():
    	# ...

    Tasks can only be created and scheduled in coroutines. There are two main ways to create and schedule tasks, they are:

    • Create tasks using high-level API (preferred)

    • Create tasks using low-level API

    2.1. Advanced API

    You can use the asyncio.create_task() function to create tasks. The asyncio.create_task() function accepts a coroutine instance and an optional task name, and returns an asyncio.Task instance.

    ...
    # create a coroutine
    coro = task_coroutine()
    # create a task from a coroutine
    task = asyncio.create_task(coro)

    This can be achieved by using a compound statement in a single line.

    ...
    # create a task from a coroutine
    task = asyncio.create_task(task_coroutine())

    This will do a few things:

    • Wrap the coroutine in an asynchronous task instance.

    • Scheduling tasks to be executed in the current event loop.

    • Return a task instance

    Task instances can be discarded, interacted with through methods, and waited on by coroutines. This is the preferred way to create tasks from coroutines in asyncio programs.

    2.2. Low-level API

    You can also use the lower-level asyncio API to create tasks from coroutines.

    The first method is to use the asyncio.ensure_future() function. This function takes a task, future, or future-like object such as a coroutine, and optionally a loop for scheduling it. If no loop is provided, it will be scheduled in the current event loop.

    If a coroutine is provided for this function, it will be wrapped in an instance for us and then returned.

    ...
    # create and schedule the task
    task = asyncio.ensure_future(task_coroutine())

    Another low-level function we can use to create and schedule tasks is the loop.create_task() method. This function requires access to a specific event loop where the coroutine is executed as a task.

    We can get the instance of the current event loop in the asyncio program through the asyncio.get_event_loop() function. This can then be used to call the create_task() method to create a Task instance and schedule it for execution.

    ...
    # get the current event loop
    loop = asyncio.get_event_loop()
    # create and schedule the task
    task = loop.create_task(task_coroutine())

    3. When does the task run?

    A common question after creating a task is when will it run?

    Although we can schedule the coroutine to run independently as a task through the create_task() function, it may not run immediately. In fact, the task won't execute until the event loop has a chance to run.

    This will not happen until all other coroutines are not running and it is the task's turn to run.

    For example, if we have an asyncio program with a coroutine that creates and schedules tasks, the scheduled tasks will not run until the calling coroutine that created the task is suspended.

    This may occur if the calling coroutine chooses to sleep, chooses to wait for another coroutine or task, or chooses to wait for a new task that has been scheduled.

    ...
    # create a task from a coroutine
    task = asyncio.create_task(task_coroutine())
    # await the task, allowing it to run
    await task

    Now we know what tasks are and how to schedule them.

    The above is the detailed content of How to create and run asynchronous tasks in Python. For more information, please follow other related articles on the PHP Chinese website!

    Statement
    This article is reproduced at:亿速云. If there is any infringement, please contact admin@php.cn delete
    Why are arrays generally more memory-efficient than lists for storing numerical data?Why are arrays generally more memory-efficient than lists for storing numerical data?May 05, 2025 am 12:15 AM

    Arraysaregenerallymorememory-efficientthanlistsforstoringnumericaldataduetotheirfixed-sizenatureanddirectmemoryaccess.1)Arraysstoreelementsinacontiguousblock,reducingoverheadfrompointersormetadata.2)Lists,oftenimplementedasdynamicarraysorlinkedstruct

    How can you convert a Python list to a Python array?How can you convert a Python list to a Python array?May 05, 2025 am 12:10 AM

    ToconvertaPythonlisttoanarray,usethearraymodule:1)Importthearraymodule,2)Createalist,3)Usearray(typecode,list)toconvertit,specifyingthetypecodelike'i'forintegers.Thisconversionoptimizesmemoryusageforhomogeneousdata,enhancingperformanceinnumericalcomp

    Can you store different data types in the same Python list? Give an example.Can you store different data types in the same Python list? Give an example.May 05, 2025 am 12:10 AM

    Python lists can store different types of data. The example list contains integers, strings, floating point numbers, booleans, nested lists, and dictionaries. List flexibility is valuable in data processing and prototyping, but it needs to be used with caution to ensure the readability and maintainability of the code.

    What is the difference between arrays and lists in Python?What is the difference between arrays and lists in Python?May 05, 2025 am 12:06 AM

    Pythondoesnothavebuilt-inarrays;usethearraymoduleformemory-efficienthomogeneousdatastorage,whilelistsareversatileformixeddatatypes.Arraysareefficientforlargedatasetsofthesametype,whereaslistsofferflexibilityandareeasiertouseformixedorsmallerdatasets.

    What module is commonly used to create arrays in Python?What module is commonly used to create arrays in Python?May 05, 2025 am 12:02 AM

    ThemostcommonlyusedmoduleforcreatingarraysinPythonisnumpy.1)Numpyprovidesefficienttoolsforarrayoperations,idealfornumericaldata.2)Arrayscanbecreatedusingnp.array()for1Dand2Dstructures.3)Numpyexcelsinelement-wiseoperationsandcomplexcalculationslikemea

    How do you append elements to a Python list?How do you append elements to a Python list?May 04, 2025 am 12:17 AM

    ToappendelementstoaPythonlist,usetheappend()methodforsingleelements,extend()formultipleelements,andinsert()forspecificpositions.1)Useappend()foraddingoneelementattheend.2)Useextend()toaddmultipleelementsefficiently.3)Useinsert()toaddanelementataspeci

    How do you create a Python list? Give an example.How do you create a Python list? Give an example.May 04, 2025 am 12:16 AM

    TocreateaPythonlist,usesquarebrackets[]andseparateitemswithcommas.1)Listsaredynamicandcanholdmixeddatatypes.2)Useappend(),remove(),andslicingformanipulation.3)Listcomprehensionsareefficientforcreatinglists.4)Becautiouswithlistreferences;usecopy()orsl

    Discuss real-world use cases where efficient storage and processing of numerical data are critical.Discuss real-world use cases where efficient storage and processing of numerical data are critical.May 04, 2025 am 12:11 AM

    In the fields of finance, scientific research, medical care and AI, it is crucial to efficiently store and process numerical data. 1) In finance, using memory mapped files and NumPy libraries can significantly improve data processing speed. 2) In the field of scientific research, HDF5 files are optimized for data storage and retrieval. 3) In medical care, database optimization technologies such as indexing and partitioning improve data query performance. 4) In AI, data sharding and distributed training accelerate model training. System performance and scalability can be significantly improved by choosing the right tools and technologies and weighing trade-offs between storage and processing speeds.

    See all articles

    Hot AI Tools

    Undresser.AI Undress

    Undresser.AI Undress

    AI-powered app for creating realistic nude photos

    AI Clothes Remover

    AI Clothes Remover

    Online AI tool for removing clothes from photos.

    Undress AI Tool

    Undress AI Tool

    Undress images for free

    Clothoff.io

    Clothoff.io

    AI clothes remover

    Video Face Swap

    Video Face Swap

    Swap faces in any video effortlessly with our completely free AI face swap tool!

    Hot Tools

    MinGW - Minimalist GNU for Windows

    MinGW - Minimalist GNU for Windows

    This project is in the process of being migrated to osdn.net/projects/mingw, you can continue to follow us there. MinGW: A native Windows port of the GNU Compiler Collection (GCC), freely distributable import libraries and header files for building native Windows applications; includes extensions to the MSVC runtime to support C99 functionality. All MinGW software can run on 64-bit Windows platforms.

    SecLists

    SecLists

    SecLists is the ultimate security tester's companion. It is a collection of various types of lists that are frequently used during security assessments, all in one place. SecLists helps make security testing more efficient and productive by conveniently providing all the lists a security tester might need. List types include usernames, passwords, URLs, fuzzing payloads, sensitive data patterns, web shells, and more. The tester can simply pull this repository onto a new test machine and he will have access to every type of list he needs.

    EditPlus Chinese cracked version

    EditPlus Chinese cracked version

    Small size, syntax highlighting, does not support code prompt function

    Dreamweaver Mac version

    Dreamweaver Mac version

    Visual web development tools

    ZendStudio 13.5.1 Mac

    ZendStudio 13.5.1 Mac

    Powerful PHP integrated development environment