Python线程和值传递

2024-04-26 13:21:38 发布

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

我试图更新线程,不断运行新的价值观,不时。你知道吗

class Test:
    def __init__(self, num):
        #testing reasons
        self.num = num

    def printloop(self, num):
        self.num = num
        #running is set to True sometime in the beginning   
        while running:
            print(self.num)
            time.sleep(3)
        if not running:
            print("finished")
    def setnum(self, num):
        self.num = num

我创建如下线程:

t1 = threading.Thread(target=test.printloop,args=("1"))

这样可以打印正确的arg。你知道吗

但是如果需要,我如何用新的值更新单线程呢?并非所有的线程都需要更新。我的类中的setnum方法显然不起作用,因为它会更新所有线程的值。你知道吗

我是否需要限制线程生存期并加入并等待它们完成。然后用新的价值观重建它们? 或者我应该为每个线程定义一个变量-我如何动态地这样做? 还是有更好的方法让我看不见? 谢谢!你知道吗

编辑:

我想我最终会得到这样的结果:

test1 = Test(1)
..
test5 = Test(5)

t1 = threading.Thread(target=test1.printloop,args=("1"))
t5 = threading.Thread(target=test5.printloop,args=("5"))

然后用一个方法对每个值进行设置?你知道吗


Tags: 方法testselftargetdefargs线程thread
1条回答
网友
1楼 · 发布于 2024-04-26 13:21:38

对于单个整数值,可以使Test成为thread的子类(并使run调用printloop)。然后其他线程可以安全地调用setnum。由于GIL和设置单个值的事实,这是安全的,如果要执行更复杂的更新,则必须将setnumprintloop中的内环包装在锁中,以防止竞争条件。你知道吗

编辑:一个简单的例子

from threading import Thread
from time import sleep

class Output(Thread):

    def __init__(self, num):
        super(Output, self).__init__()
        self.num = num
        self.running = False

    def run(self):
        self.running = True
        while self.running:
            print self.num
            sleep(1)

    def stop(self):
        self.running = False

    def set_num(self, num):
        self.num = num

output = Output(0)
output.start()
sleep(3)
output.set_num(1)
sleep(3)
output.stop()
output.join()

相关问题 更多 >