Python 3.x Python中的多线程问题-如何使其正常工作?
你好!!我的程序必须计算一个立方体的体积和总长度,并将所有这些数据打印到线程中。线程没有启动…我应该修改什么?它必须返回4个结果。您最好创建一个辅助函数,而不是尝试使用Python 3.x Python中的多线程问题-如何使其正常工作?,python-3.x,multithreading,queue,Python 3.x,Multithreading,Queue,你好!!我的程序必须计算一个立方体的体积和总长度,并将所有这些数据打印到线程中。线程没有启动…我应该修改什么?它必须返回4个结果。您最好创建一个辅助函数,而不是尝试使用lambda封装该逻辑。如果我理解正确,您总共需要四个线程。相反,您可以让每个线程只计算两次输出。当您有四个线程时,代码如下所示 import queue import threading class Cube(): def __init__(self, lat): self.lat = lat def vo
lambda
封装该逻辑。如果我理解正确,您总共需要四个线程。相反,您可以让每个线程只计算两次输出。当您有四个线程时,代码如下所示
import queue
import threading
class Cube():
def __init__(self, lat):
self.lat = lat
def volume(self):
return self.lat ** 3
def lenght(self):
return self.lat * 12
if __name__ == "__main__":
que = queue.Queue()
cube = Cube(2)
t1 = threading.Thread(target=lambda c, q: q.put(c.lenght()), args=(cube, que))
t2 = threading.Thread(target=lambda c, q: q.put(c.volume()), args=(cube, que))
t1.start()
t2.start()
t1.join()
t2.join()
while not que.empty():
result = que.get()
print(result)
前面提到的另一个选项是让每个线程执行两次逻辑,如下所示
import queue
import threading
NUM_ITERS = 2
class Cube():
def __init__(self, lat):
self.lat = lat
def volume(self):
return self.lat ** 3
def length(self):
return self.lat * 12
def worker(cube, q, attr):
func = getattr(cube, attr)
val = func()
q.put(val)
if __name__ == "__main__":
que = queue.Queue()
cube = Cube(2)
threads = []
for _ in range(NUM_ITERS):
for attr in ("length", "volume"):
thread = threading.Thread(target=worker, args=(cube, que, attr))
threads.append(thread)
for thread in threads:
thread.start()
while not que.empty():
result = que.get()
print(result)
你是说两个结果?另外,如果您正确缩进每个对象,代码也可以工作。我需要启动2个线程并按一定顺序执行方法。因此,每个线程都需要计算长度和体积?一个线程代表体积,一个线程代表长度。每个线程必须启动两次。不明白为什么,但我必须这样做。。。
import queue
import threading
NUM_ITERS = 2
class Cube():
def __init__(self, lat):
self.lat = lat
def volume(self):
return self.lat ** 3
def length(self):
return self.lat * 12
def worker(cube, q, attr):
for num in range(NUM_ITERS):
func = getattr(cube, attr)
val = func()
q.put(val)
if __name__ == "__main__":
que = queue.Queue()
cube = Cube(2)
t1 = threading.Thread(target=worker, args=(cube, que, "length"))
t2 = threading.Thread(target=worker, args=(cube, que, "volume"))
t1.start()
t2.start()
t1.join()
t2.join()
while not que.empty():
result = que.get()
print(result)