Проблема параллелизма или что-то еще? Метод .save () + время БД - PullRequest
0 голосов
/ 07 ноября 2019

Таким образом, ситуация такова: у меня есть конечная точка A, которая создает данные и вызывает .save () для этих данных (вызовите это functionA), который также отправляет запрос на публикацию во внешний сторонний API, который будет вызыватьмоя конечная точка B (назовите это functionB)

def functionA():
    try:
        with transaction.atomic()
            newData = Blog(title="new blog")
            newData.save()

            # findSavedBlog = Blog.objects.get(title="new blog")
            # print(findSavedBlog) 

            r = requests.post('www.thirdpartyapi.com/confirm_blog_creation/', some_data) # this post request will trigger the third party to send a post request to endpoint calling functionB
            return HttpResponse("Result was: " + r.status)
def functionB():
    blogTitle = request.POST.get('blog_title') # assume this evaluates to 'new blog'
    # sleep(20)
    try:
        findBlog = Blog.objects.get(title=blogTitle) # again this will be the same as Blog.objects.get(title="new blog")

    except ObjectDoesNotExist as e:
        print("Blog not found!")

Если я раскомментирую часть findSavedBlog функции A, она напечатает сохраненный блог, но функция B все равно не будет работать.

Если я добавлю sleep к функции B, чтобы дождаться, пока БД завершит запись, а затем попытаться извлечь вновь созданные данные, это все равно не удастся.

Любой, кто знаком с Джанго. Метод save () и / или некоторые знания параллелизма помогут мне здесь? Очень признателен. Спасибо!

РЕДАКТИРОВАТЬ: Проблема заключалась в том, что я обернул всю функцию A в атомарный блок (изначально забыл написать эту часть функции A), что означало, что транзакции не фиксируютсядо тех пор, пока не вернется функция A!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...