如果Python对象未绑定,会发生什么?

2024-07-01 06:37:10 发布

您现在位置:Python中文网/ 问答频道 /正文

import queue, threading

def getFromQueue(myQueue):
    while True:
        print(myQueue.get())

def putInQueue(myQueue):
    while True:
        putString=... #code that provides values
        myQueue.put(putString)


for msg in msgList:
    myQueue=queue.Queue()
    threading.Thread( target=getFromQueue, args=(myQueue, ) ).start()
    threading.Thread( target=putInQueue, args=(myQueue, ) ).start()

我的目标是让每对(getFromQueue和putInQueue)线程在一个循环中共享一个唯一的队列。当我将myQueue重新分配给新队列对象时,旧队列对象会发生什么情况?每个线程是否仍然使用我生成线程时传递的原始队列对象,还是所有现有线程都更新为指向新的/最新的线程,并且所有线程都共享一个队列对象


Tags: 对象truetarget队列queuedefargs线程
1条回答
网友
1楼 · 发布于 2024-07-01 06:37:10

在为全局myQueue分配一个新值之前,Queue的每个实例都会获得对它的两个引用:将myQueue参数分配给getFromQueue,将myQueue参数分配给putInQueue。仅当对象的最后一次引用解除绑定时,对象才会被销毁

新赋值myQueue = queue.Queue()Queue的前一个实例的唯一影响是其引用计数将从3减少到2

一旦为Queue的给定实例执行函数的两个线程都退出,则可以收集该实例。当本地myQueue超出范围时,退出的第一个线程将导致引用计数从2减少到1;第二个将导致引用计数从1减少到0

相关问题 更多 >

    热门问题