The object with alias 'default' was created in thread id 2281649653888 and this is thread id 2281728636176. Celery problem completing tasks

Viewed 94

I am trying to figure out, how to get the created post id, so I could use it later to send an email to subscribers. But the system is giving me an error, that says the following:

Traceback (most recent call last):
  File "c:\users\1224095\skillfactory\testing2\venv\lib\site-packages\celery\app\trace.py", line 405, in trace_task
    R = retval = fun(*args, **kwargs)
  File "c:\users\1224095\skillfactory\testing2\venv\lib\site-packages\celery\app\trace.py", line 697, in __protected_call__
    return self.run(*args, **kwargs)
  File "C:\Users\1224095\skillfactory\Testing2\NewsPaper\News\tasks.py", line 12, in Post_send
    post = Post.objects.get(id=oid)
  File "c:\users\1224095\skillfactory\testing2\venv\lib\site-packages\django\db\models\manager.py", line 85, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "c:\users\1224095\skillfactory\testing2\venv\lib\site-packages\django\db\models\query.py", line 431, in get
    num = len(clone)
  File "c:\users\1224095\skillfactory\testing2\venv\lib\site-packages\django\db\models\query.py", line 262, in __len__
    self._fetch_all()
  File "c:\users\1224095\skillfactory\testing2\venv\lib\site-packages\django\db\models\query.py", line 1324, in _fetch_all
    self._result_cache = list(self._iterable_class(self))
  File "c:\users\1224095\skillfactory\testing2\venv\lib\site-packages\django\db\models\query.py", line 51, in __iter__
    results = compiler.execute_sql(chunked_fetch=self.chunked_fetch, chunk_size=self.chunk_size)
  File "c:\users\1224095\skillfactory\testing2\venv\lib\site-packages\django\db\models\sql\compiler.py", line 1167, in execute_sql
    cursor = self.connection.cursor()
  File "c:\users\1224095\skillfactory\testing2\venv\lib\site-packages\django\utils\asyncio.py", line 26, in inner
    return func(*args, **kwargs)
  File "c:\users\1224095\skillfactory\testing2\venv\lib\site-packages\django\db\backends\base\base.py", line 259, in cursor
    return self._cursor()
  File "c:\users\1224095\skillfactory\testing2\venv\lib\site-packages\django\db\backends\base\base.py", line 237, in _cursor
    return self._prepare_cursor(self.create_cursor(name))
  File "c:\users\1224095\skillfactory\testing2\venv\lib\site-packages\django\db\backends\base\base.py", line 227, in _prepare_cursor
    self.validate_thread_sharing()
  File "c:\users\1224095\skillfactory\testing2\venv\lib\site-packages\django\db\backends\base\base.py", line 552, in validate_thread_sharing
    raise DatabaseError(
django.db.utils.DatabaseError: DatabaseWrapper objects created in a thread can only be used in that same thread. The object with alias 'default' was created in thread id 2281649653888 and
 this is thread id 2281728636176.

my views.py

    def form_valid(self, form):

    news_day_limit = 3
    author = Author.objects.get(author=self.request.user)
    form.instance.author = author
    post = form.save()
    post.save()
    Post_send.apply_async([post.id], countdown=1)

my tasks.py

@shared_task
def Post_send(oid):
    post = Post.objects.get(id=oid)
    post_subscribers = post.category.subscribers.all()
    address = []
    for a in post_subscribers:
        address.append(a.email)
    for user_id in list(post.category.subscribers.all().values_list('subscriber', flat=True)):
        user = User.objects.get(id=user_id)
        html_content = render_to_string(
            'message_for_subscribers.html',
            {
                'text': post.text,
                'title': post.title,
                'category': post.category,
                'username': user.username,
                'link': f'http://127.0.0.1:8000/Posts/{post.id}',
            })
        msg = EmailMultiAlternatives(
            subject='New post coming to you',
            from_email='gregtmj@gmail.com',
            to=[*address],  # это то же, что и recipients_list
        )
        msg.attach_alternative(html_content, "text/html")  # добавляем html
        msg.send()

    return redirect('/posts')

and ofc every function is imported. I am taking a guess, that I am not connecting the post id with the tasks, but still, this code is runing perfectly, if I am using appscheduler instead.

0 Answers
Related