Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

asynchronous programming in python

Is there a generic notion of asynchronous programming in python? Could I assign a callback to a function, execute it and return to the main program flow immediately, no matter how long the execution of that function would take?

like image 257
facha Avatar asked Jul 11 '10 00:07

facha


People also ask

What is asynchronous and synchronous in Python?

There are two basic types of methods in the Parallels Python API: synchronous and asynchronous. When a synchronous method is invoked, it completes executing before returning to the caller. An asynchronous method starts a job in the background and returns to the caller immediately.

What is asynchronous call in Python?

Asynchronous programming is a type of programming in which we can execute more than one task without blocking the Main task (function). In Python, there are many ways to execute more than one function concurrently, one of the ways is by using asyncio.

What is asynchronous programming?

Also known as nonblocking code, asynchronous programming provides opportunities for a program to continue running other code while waiting for a long-running task to complete. The time-consuming task is executed in the background while the rest of the code continues to execute.


2 Answers

What you describe (the main program flow resuming immediately while another function executes) is not what's normally called "asynchronous" (AKA "event-driven") programming, but rather "multitasking" (AKA "multithreading" or "multiprocessing"). You can get what you described with the standard library modules threading and multiprocessing (the latter allows actual concurrent execution on multi-core machines).

Asynchronous (event-driven) programming is supported in the standard Python library in the asyncore and asynchat modules, which are very oriented to networking tasks (indeed they internally use the select module, which, on Windows, only supports sockets -- though on Unixy OSs it can also support any file descriptor).

For a more general (though also mostly networking oriented, but not limited to that) support for asynchronous (event-driven) programming, check out the twisted third-party package.

like image 61
Alex Martelli Avatar answered Oct 05 '22 22:10

Alex Martelli


Take a look here:

Asynchronous Programming in Python

An Introduction to Asynchronous Programming and Twisted

Worth checking out:

asyncio (previously Tulip) has been checked into the Python default branch

Edited on 14-Mar-2018

Today Python has asyncIO — Asynchronous I/O, event loop, coroutines and tasks built in.

Description taken from the link above:

The asyncIO module provides infrastructure for writing single-threaded concurrent code using coroutines, multiplexing I/O access over sockets and other resources, running network clients and servers, and other related primitives. Here is a more detailed list of the package contents:

  1. a pluggable event loop with various system-specific implementations;
  2. transport and protocol abstractions (similar to those in Twisted);
  3. concrete support for TCP, UDP, SSL, subprocess pipes, delayed calls, and others (some may be system-dependent);
  4. a Future class that mimics the one in the concurrent.futures module, but adapted for use with the event loop;
  5. coroutines and tasks based on yield from (PEP 380), to help write concurrent code in a sequential fashion;
  6. cancellation support for Futures and coroutines;
  7. synchronization primitives for use between coroutines in a single thread, mimicking those in the threading module;
  8. an interface for passing work off to a threadpool, for times when you absolutely, positively have to use a library that makes blocking I/O calls.

Asynchronous programming is more complex than classical “sequential” programming: see the Develop with asyncio page which lists common traps and explains how to avoid them. Enable the debug mode during development to detect common issues.

Also worth checking out:

A guide to asynchronous programming in Python with asyncIO

like image 45
Leniel Maccaferri Avatar answered Oct 05 '22 23:10

Leniel Maccaferri