首页 > 解决方案 > Python 线程:哪些函数在哪个线程中运行

问题描述

所以我有一个 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 相同的线程中执行?鉴于它使用导入的库。

任何帮助或帮助将不胜感激......

标签: pythonmultithreadingpsycopg2race-condition

解决方案


里面的代码addItemToDb将被限制在运行的线程中,workerChecker只要它只被那个函数调用,但它可以在主线程或您创建的任何其他线程中的该线程之外的任何地方使用。

如果您想确保只能workerChecker访问该功能,您可以addItemToDb在里面定义workerChecker

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

推荐阅读