Передача функции в поток

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

, потому что мне показалось удобным, но работает это все дело не так как мне нужно. Итак:

1) Класс "А", в котором есть внешний поток и инициализирована очередь

2) Очень важно чтобы очередь выполнялась именно во внешнем потоке

3) В главной функции я передаю в очередь функцию "GG", которая просто печатает текст

4) Соответственно, я ожидаю что функция выполнится во внешнем потоке класса "А", но функция выполняется в главном потоке, то есть в функции "main", затем во внешнем потоке срабатывает функция "queue.get()", печатается текст, и очередь сообщает что она выполнила свою задачу "queue.task_done()"

5) Далее внешний поток в классе "А" ожидает что в очередь попадет следующая задача

PythonВыделить код

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

class A:
    thr: threading
    queue: Queue
 
    def __init__(self):
        self.queue = Queue()
        self.thr = threading.Thread(target=self.test, args=(self.queue, ))
        self.thr.start()
 
    def test(self, queue: Queue):
        while True:
            queue.get()
            print('class')
            queue.task_done()
            time.sleep(0.1)
 
def GG():
    while True:
        print('GG')
        time.sleep(1)
 
if __name__ == '__main__':
 
    a = A()
    a.queue.put(GG())
 
    while True:
        print('main')
        time.sleep(0.1)

Вопроса 2:

1) Как сделать правильно, чтобы очередь выполнялась именно во внешнем потоке

2) Думаю для этих дел есть более удачный инструмент - какой?