我正在尝试“保存”函数的返回值(该函数返回整数),但是我获取了None对象
import threading
class SitesThread(threading.Thread):
def __init__(self, func, searchLine):
threading.Thread.__init__(self)
self.func = func
self.searchLine = searchLine
def run(self):
self.func(self.searchLine)
def print1(searchLine):
print(searchLine, "this is print 1")
return 1
def print2(searchLine):
print(searchLine, "this is print 2")
return 2
def main():
threads = []
line = input("pleAS insert a search line")
t1 = SitesThread(print1, line)
t2 = SitesThread(print2, line)
res1 = t1.start()
res2 = t2.start()
threads.append(t1)
threads.append(t2)
for t in threads:
t.join()
print("thread 1 is alive?", t1.isAlive())
print(res1)
print("thread 2 is alive?", t2.isAlive())
print(res2)
if __name__ == "__main__":
main()
我期望得到: 'searchLine'这是打印1 'searchLine'这是打印2 线程1还活着吗?假 1个 线程2还活着吗?假 2
但是我得到: 我期望得到: 'searchLine'这是打印1 'searchLine'这是打印2 线程1还活着吗?假 没有 线程2还活着吗?假 没有
答案 0 :(得分:0)
我不确定如何将其返回并放置在res1或2变量中。但是,您仍然可以打印出线程的searchLine部分。看看下面的代码
print("thread 1 is alive?", t1.isAlive())
print(t1.searchLine)
print("thread 2 is alive?", t2.isAlive())
print(t2.searchLine)
这将打印您要搜索的内容...因此,如果您搜索12,它将打印12。
希望这会有所帮助。我将继续研究它,看看是否可以获得与您的预期输出完全匹配的东西。
答案 1 :(得分:0)
到目前为止,看来我无法从运行返回值的函数的线程获得返回值。 因此,如果有人遇到与我相同的问题,一个可选的解决方案是更改函数,而不是返回值,而是可以将值放入全局列表中(确保您确切知道要在列表中的哪个位置保存此值,因此您的其他线程将无法运行它。
另一种解决方案是使用进程而不是线程,但是由于我试图节省时间,并且我的功能全都与API请求有关,因此我了解到在这种情况下线程比进程快。
希望对某人有用。