Python Threading: какие функции в каком потоке выполняются - PullRequest
0 голосов
/ 27 мая 2020

Итак, у меня есть приложение на pyhthon, которое я пытаюсь имитировать систему выстраивания очереди. Он импортирует библиотеку и вызывает эту библиотеку, в частности psycopg2. Пример кода:

import threading,queue,psycopg2

q = queue.Queue()

def workerChecker():
  while True:#Keeps the thread always checking for new things in queue
    item = q.get()
    addItemToDb(item) <------This part 
    q.task_done()

threading.Thread(target=workerChecker, daemon=True).start()

def addItemToDb(item):
  #Do something and use psycopg2 to insert item to db here

Поэтому я не могу найти четкого ответа в Интернете, в каком потоке будут выполняться коды в addItemToDb.

В частности, будут ли все коды в функции addItemToDb должны выполняться в том же потоке, что и workerChecker? Учитывая, что он использует импортированную библиотеку.

Любая помощь будет очень признательна ...

1 Ответ

1 голос
/ 27 мая 2020

Код внутри addItemToDb будет ограничен потоком, который запускает workerChecker, пока он вызывается только этой функцией, но его можно использовать где угодно за пределами этого потока в основном потоке или любом другом потоке, который вы create.

Если вы хотите убедиться, что только workerChecker имеет доступ к этой функции, вы можете определить addItemToDb внутри workerChecker

def workerChecker():
    def addItemToDb(item):
        # addItemToDb definition
        pass
    while True:
        item = q.get()
        addItemToDb(item)
        q.task_done()
...