如何使用线程中的数据?

时间:2019-03-14 23:21:42

标签: python python-3.x multithreading

我在带线程的python上有一个代码,但是我不知道如何使用数据(例如:第一和第二个线程中的if (f(x) + g(y))<5)。 我的输出:

x 2
y 1
0 0
True
x 4
y 2
0 0
True

期望输出:

x 2
y 1
2 1
True
x 4
y 2
4 2
False

我的代码:

import threading


def f(x, event_for_wait, event_for_set):
    for i in range(5):
        event_for_wait.wait()
        event_for_wait.clear()
        x = x + 2
        print("x",x)
        event_for_set.set()


def g(y, event_for_wait, event_for_set):
    for i in range(5):
        event_for_wait.wait()
        event_for_wait.clear()
        y = y + 1
        print("y",y)
        event_for_set.set()

def func (x , y, event_for_wait, event_for_set):
    for i in range(5):
        event_for_wait.wait()
        event_for_wait.clear()
        print(x, y)
        if x + y < 5:
            print(True)
            event_for_set.set()
        else:
            print(False)
            event_for_set.set()


x = 0
y = 0
# init events
e1 = threading.Event()
e2 = threading.Event()
e3 = threading.Event()
# init threads

t1 = threading.Thread(target=f, args=(x, e1, e2))

t2 = threading.Thread(target=g, args=(y, e2, e3))

t3 = threading.Thread(target=func, args=(x, y,  e3, e1))



t1.start()

t2.start()

t3.start()

e1.set() # initiate the first event

1 个答案:

答案 0 :(得分:0)

我建议您只使用全局变量。如果要共享变量thevar的数据,例如: 在脚本的最上方:

thevar = 0
global thevar

在使用thevar的每个线程中:

global thevar

就是这样,现在所有线程都可以访问thevar并将其计算存储在那里。