Задать вопрос
Ответы пользователя по тегу Python
  • Как при запросе пользователя, вывести его последний онлайн?

    Правильным будет сделать так, вам нужно view который принимает post (или get не сильно принципиально) запрос, можно без тела запроса. В логике view определите функцию которая будет обновлять необходимое вам поле. На стороне браузера реализуйте функцию которая раз в 5 секунд отправляет post запрос на данную view. таким образом вы сможете точно знать пользователь онлайн или нет.

    Реализация через SQL возможна, но пользователь может быть на сайте но не совершать никаких действий, в таком случае реализация через SQL не будет давать ожидаемого результата.
    Ответ написан
    Комментировать
  • Как в celery можно связать выполнение функций?

    Для этого нужно использовать chains
    Ответ написан
    Комментировать
  • Как при асинхронной обработке с помощью нейросетей не подтягивать каждый раз веса?

    @decembrin Автор вопроса
    После более глубокого изучения python rq, сделали следующим образом, вместо запуска rq worker, мы запускаем скрипт python run_rq.py. Почти не измененный пример из документации.
    # run_rq.py
    import sys
    from rq import Connection
    
    from worker import CustomWorker
    
    # Preload libraries
    from pydarknet import Detector
    
    detector = Detector(bytes('cfg/yolov3.cfg', encoding='utf-8'),
                        bytes('weights/yolov3.weights', encoding='utf-8'),
                        0,
                        bytes('cfg/coco.data',encoding='utf-8'))
    
    # Provide queue names to listen to as arguments to this script,
    # similar to rq worker
    with Connection():
        qs = sys.argv[1:] or ['default']
    
        w = CustomWorker(qs)
        w.detector = detector
        w.work()
    
    
    # worker.py
    from rq.worker import (DEFAULT_JOB_MONITORING_INTERVAL, DEFAULT_RESULT_TTL,
                           DEFAULT_WORKER_TTL, Worker)
    
    import settings
    
    
    class CustomWorker(Worker):
        def __init__(self, queues, name=None, default_result_ttl=DEFAULT_RESULT_TTL,
                     connection=None, exc_handler=None, exception_handlers=None,
                     default_worker_ttl=DEFAULT_WORKER_TTL, job_class=None,
                     queue_class=None,
                     job_monitoring_interval=DEFAULT_JOB_MONITORING_INTERVAL):
    
            super(CustomWorker, self).__init__(queues, name, default_result_ttl,
                connection, exc_handler, exception_handlers, default_worker_ttl,
                job_class, queue_class,job_monitoring_interval)
    
            self.detector = None
    
        def execute_job(self, job, queue):
            if not self.detector is None:
                job.detector = self.detector
    
            super(CustomWorker, self).execute_job(job, queue)
    
    # tasks.py
    from rq import get_current_job
    
    import settings
    
    
    def send():
        job = get_current_job()
        if not job.detector is None:
            # do more work

    Далее внутри кастомного воркера в методе execute_job мы и передаем инстанс detector в внутрь Job.
    Таким образом каждый инстанс Job получает уже посчитанный заранее Detector.
    Ответ написан
    Комментировать