Не думайте о потоках как об объектах, потому что они ими не являются. Поток — это нить выполнения, которая во время инициализации принимает функцию, которую будет выполнять. После инициализации — это отдельный мини-процесс. Вызвать метод потока невозможно: у него их попросту нет. Можно вызвать метод дескриптора (объекта, который управляет потоком) но не самого потока. Отличием потоков от процессов является то, что потоки разделяют адресное пространство с процессом, который их породил. Это значит, что каждый поток имеет доступ к данным процесса и других потоков.
Теперь о вариантах решения. Я их вижу несколько:
1. Перед запуском потока создать proxy-объект, экземпляр класса, который будет описывать подходящую для вас структуру данных. В зависимости от задачи, может быть полезным посмотреть на
Queue, он из коробки потоко-безопасен. После этого просто передать ссылку на этот объект в конструктор потока и общаться через него. Поток пишет в этот объект - django читает из него, и наоборот. Модель очереди для таких задач подходит как нельзя лучше, потому как нельзя гарантировать то, что поток подхватит задачу сразу по ее появлению, и другая задача не затрет предыдущую. Создавать proxy-объект нужно в такой точке, из которой выполнение процесса родителя не выйдет до остановки потока, иначе Вы рискуете потерять контроль над потоком или ловить "странные" ошибки.
2: Если есть необходимость ставить перед потоком разные задачи может быть разумно вынести их хранение во внешние службы, например
redis. Он очень быстрый и существенного оверхед даже на малинке не создаст. Общаться с ним можно через
этот пакет. Если хотите сэкономить на tcp-трафике - запускайте redis на unix-сокете.
Этот вариант
потенциально избавит Вас от головной боли с синхронизацией задач.
3: Если есть возможность и памяти хватает больше чем на 1 поток -
RQ. Это — легкий менеджер очереди задач для python. По сути, то, что Вы и пытаетесь реализовать.