gpt4 book ai didi

python - 从线程中获取项目

转载 作者:行者123 更新时间:2023-11-28 23:05:16 25 4
gpt4 key购买 nike

from threading import Thread
import time
print 'start of script'

class MyThread(Thread):
def __init__(self, start, end):
self.start = start
self.end = end
def run(self):
for i in xrange(self.start,self.end):
yield i




my_threads = []

my_thread = MyThread(1,6)
my_thread.start()
my_threads.append(my_thread)

my_thread = MyThread(6,11)
my_thread.start()
my_threads.append(my_thread)

my_thread = MyThread(11,16)
my_thread.start()
my_threads.append(my_thread)


for t in my_threads:
print t.join()

print 'end of script'

我怎样才能正确地做到这一点?我正在尝试打印数字:range(1,16),其中我从在单独线程中运行的函数的输出中获取此数字。

我知道我不会按顺序获取此范围内的数字,因为函数的本质是在单独的线程中运行。

我也知道我可以简单地在线程的函数本身中打印它们,但这不是重点,我想打印我在主线程或代码的主要部分返回的内容。

最佳答案

线程不返回值,因此您将无法像您希望的那样将值返回给主线程。如果您要运行脚本(您需要将 start 变量的名称更改为其他名称,因为您正在隐藏 start 方法),您会观察 t.join() 的返回值是 None。解决此问题的一种常见方法是使用队列,正如在类似问题中所建议的那样:Return value from thread

在您的情况下,我不会调用 yield i,而是调用 queue.put(i),其中 queueQueue .Queue 在构造过程中传入,然后在我加入我的线程之前在主线程中有一个循环:

while True:
try:
print outqueue.get(True, 1)
except Empty:
break

for t in my_threads:
print t.join()

在抛出 Empty 并跳出 while 循环之前,对于新项目最多等待 1 秒。

关于python - 从线程中获取项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6324318/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com