python - 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 相同的线程中执行?鉴于它使用导入的库。
任何帮助或帮助将不胜感激......
解决方案
里面的代码addItemToDb
将被限制在运行的线程中,workerChecker
只要它只被那个函数调用,但它可以在主线程或您创建的任何其他线程中的该线程之外的任何地方使用。
如果您想确保只能workerChecker
访问该功能,您可以addItemToDb
在里面定义workerChecker
def workerChecker():
def addItemToDb(item):
# addItemToDb definition
pass
while True:
item = q.get()
addItemToDb(item)
q.task_done()
推荐阅读
- julia - Julia & Avro.jl:元组问题
- jasmine - 为什么在茉莉花中默认将allowRespy设置为false?
- accessibility - 在箭头访问时,单词必须像单个字母一样读取,因为它是邀请码,它不应该像单词一样读取
- vba - 如何确定 ReceivedTime 之前的工作日?
- aem - AEM 与谷歌企业recaptcha 库的集成
- network-programming - 我可以使用 VPLS 将 2 个远程设备放在同一个 LAN 中,然后运行 VRRP 协议来重新拥有 IP 地址吗?
- javascript - 通过 vue-bootstrap 中的复选框打开模式?
- laravel - Laravel 爆炸包含名称和数字的 Ajax 请求
- python - 连接从 iloc[0] 返回的系列与现有数据帧
- calendar - 有什么方法可以在 birt eclipse 中添加日历选项