Python Celery versus Threading Library for running async requests

10,058

The Python interpreter is resolutely single threaded due to the (in)famous global interpreter lock aka (GIL). Thus threading in Python only provides parallelism when computation and IO can happen simultaneously. Compute bound tasks will see little benefit from threading in the Python threading model, at least under CPython 2 or 3.

On the other hand, those limitations don't apply to multiprocessing, which is what you'll be doing with a queuing system like celery. You can run several worker instances of Python which can execute simultaneously on multicore machines, or multiple machines for that matter.

If I understand your scenario - an interaction on a web site kicks off a long-running job - queuing is almost certainly the way to go. You get true parallelism and the easy option to move processing to other machines.

Share:
10,058
ninajay
Author by

ninajay

Updated on June 06, 2022

Comments

  • ninajay
    ninajay about 2 years

    I am running a python method that parses a lot of data. Since it is time intensive, I would like to run it asynchronously on a separate thread so the user can still access the website/UI.

    Do threads using the "from threading import thread" module terminate if a user exits the site or do they continue to run on the server?

    What would be the advantages of using Celery versus simply using the threading module for something like this?