I have a project name called ShippingApp and I followed the steps to set up the celery worker. I am using celery 3.1.26.post2 with python3.7 and when I want to start the Celery Worker I am getting the error below:
E:\ShippingApp>celery -A ShippingApp worker -l info
Traceback (most recent call last):
File "c:\program files\python37\lib\runpy.py", line 193, in _run_module_as_main
"__main__", mod_spec)
File "c:\program files\python37\lib\runpy.py", line 85, in _run_code
exec(code, run_globals)
File "C:\Program Files\Python37\Scripts\celery.exe\__main__.py", line 9, in <module>
File "c:\program files\python37\lib\site-packages\celery\__main__.py", line 30, in main
main()
File "c:\program files\python37\lib\site-packages\celery\bin\celery.py", line 81, in main
cmd.execute_from_commandline(argv)
File "c:\program files\python37\lib\site-packages\celery\bin\celery.py", line 793, in execute_from_commandline
super(CeleryCommand, self).execute_from_commandline(argv)))
File "c:\program files\python37\lib\site-packages\celery\bin\base.py", line 309, in execute_from_commandline
argv = self.setup_app_from_commandline(argv)
File "c:\program files\python37\lib\site-packages\celery\bin\base.py", line 469, in setup_app_from_commandline
self.app = self.find_app(app)
File "c:\program files\python37\lib\site-packages\celery\bin\base.py", line 489, in find_app
return find_app(app, symbol_by_name=self.symbol_by_name)
File "c:\program files\python37\lib\site-packages\celery\app\utils.py", line 235, in find_app
sym = symbol_by_name(app, imp=imp)
File "c:\program files\python37\lib\site-packages\celery\bin\base.py", line 492, in symbol_by_name
return symbol_by_name(name, imp=imp)
File "c:\program files\python37\lib\site-packages\kombu\utils\__init__.py", line 96, in symbol_by_name
module = imp(module_name, package=package, **kwargs)
File "c:\program files\python37\lib\site-packages\celery\utils\imports.py", line 101, in import_from_cwd
return imp(module, package=package)
File "c:\program files\python37\lib\importlib\__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
File "<frozen importlib._bootstrap>", line 983, in _find_and_load
File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 728, in exec_module
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "E:\ShippingApp\ShippingApp\__init__.py", line 2, in <module>
from .celery import app as celery_app
File "E:\ShippingApp\ShippingApp\celery.py", line 6, in <module>
app.config_from_object('django.conf:settings', namespace='CELERY')
TypeError: config_from_object() got an unexpected keyword argument 'namespace'
celery.py:
import os
from celery import Celery
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings')
app = Celery('mysite')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()
init.py:
from .celery import app as celery_app
tasks.py:
from celery import task
from django.core.mail import send_mail
from .models import Order
@task
def order_created(order_id):
"""
Task to send an e-mail notification when an order is
successfully created.
"""
order = Order.objects.get(id=order_id)
subject = 'Order nr. {}'.format(order.id)
message = 'Dear {},\n\nYou have successfully placed an order.\
Your order id is {}.'.format(order.first_name,
order.id)
mail_sent = send_mail(subject,
message,
'[email protected]',
[order.email])
return mail_sent
In the orders view, we have the code below:
def order_create(request):
cart = Cart(request)
if request.method == 'POST':
form = OrderCreateForm(request.POST)
if form.is_valid():
order = form.save()
for item in cart:
OrderItem.objects.create(order=order,
product=item['product'],
price=item['price'],
quantity=item['quantity'])
# clear the cart
cart.clear()
# launch asynchronous task
order_created.delay(order.id)
# set the order in the session
request.session['order_id'] = order.id
# redirect for payment
return redirect(reverse('payment:process'))
else:
form = OrderCreateForm()
return render(request,
'orders/order/create.html',
{'cart': cart, 'form': form})
Before I was using celery 4.2.1 but it was not compatible with windows 10 and I uninstall it and install the version 3.1.26.post2. Please assist.
Celery is an open-source Python library which is used to run the tasks asynchronously. It is a task queue that holds the tasks and distributes them to the workers in a proper manner. It is primarily focused on real-time operation but also supports scheduling (run regular interval tasks).
Celery allows Python applications to quickly implement task queues for many workers. It takes care of the hard part of receiving tasks and assigning them appropriately to workers. You use Celery to accomplish a few main goals: Define independent tasks that your workers can do as a Python function.
Celery is a task queue implementation for Python web applications. Meaning, it allows Python applications to rapidly implement task queues for many workers. It essentially does the hard work in that it receives tasks and then assigns them to workers as needed.
apply_async(args[, kwargs[, …]]) Sends a task message. delay(*args, **kwargs) Shortcut to send a task message, but doesn't support execution options. calling ( __call__ )
The uppercase namespace means that all celery configurations must be specified with uppercase instead of lowercase, and start with CELERY_, so that for example, task_always_eager settings becomes CELERY_TASK_ALWAYS_EAGER, and the broker_url becomes CELERY_BROKER_URL ans so on. This configuration was introduced from celery4.0 onwards.
So, for version <4 you don't need namespace
in line:
app.config_from_object('django.conf:settings', namespace='CELERY')
Replace the above with:
app.config_from_object('django.conf:settings')
NOTE: If you use celery 3.1, please check your Django version. It should be <1.8
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With