Python muiltithreading смешивает данные разных запросов в django - PullRequest
0 голосов
/ 07 марта 2020

Я использую python muiltithreading для выполнения задачи, которая длится от 2 до 3 минут, я сделал одну конечную точку API в проекте django.

Вот мой код -

from threading import Thread

def myendpoint(request):
   print("hello")
   lis = [ *args ]
   obj = Model.objects.get(name =" jax")
   T1 = MyThreadClass(lis, obj)
   T1.start()
   T1.deamon = True
   return HttpResponse("successful", status=200)


Class MyThreadClass(Thread):
     def __init__(self,lis,obj):
        Thread.__init__(self)
        self.lis = lis
        self.obj = obj
     def run(self):
         for i in lis:
             res =Func1(i)
             self.obj.someattribute = res
             self.obj.save()


def Func1(i):
    '''Some big codes'''
    context =func2(*args)
    return context


def func2(*args):
      "' some codes "'
     return res

Посредством этого muiltithreading я могу получить быстрый ответ от сервера django на вызов функции конечной точки, поскольку большая задача брошена в другой шаг и выполнение потока конечной точки прекращается в его операторе возврата, не отслеживая порожденный поток.

Эта часть работает для меня правильно, если я нажал на URL один раз, но если я нажал на URL 2 раза, как только 1-е выполнение начинается, затем по 2-му запросу я вижу свой запрос на консоли. Но я не могу получить от него никакого ответа.

И если я получаю один и тот же URL-адрес от 2 разных клиентов одновременно, оба отдельных данных смешиваются, и я вижу несколько записей запроса одного клиента на другие данные клиента.

Я тестирую его на своем локальном django runserver.

Так что, ребята, пожалуйста, помогите, и я знаю о сельдерее, поэтому не рекомендую сельдерей. Просто скажите мне, почему это происходит, или это можно исправить. Поскольку моя задача не так долго использовать сельдерей. Я хочу достигнуть этого путем многократного чтения.

...