【发布时间】:2021-10-25 17:06:25
【问题描述】:
我正在解决 LeetCode 的这个问题:1116. Print Zero Even Odd
我在 VS Code 中使用我自己的 main 函数运行此 solution 以深入了解该问题。
阅读此question 和建议的解决方案后。除了阅读这个explanation。
我将此代码添加到解决方案的代码中:
from threading import Semaphore
import threading
def threaded(fn):
def wrapper(*args, **kwargs):
threading.Thread(target=fn, args=args, kwargs=kwargs).start()
return wrapper
在我添加的问题中的这些功能之前:@threaded
我添加了一个 printNumber 函数和 main 函数来在 VS Code 上运行它。
def printNumber(num):
print(num, end="")
if __name__ == "__main__":
a = ZeroEvenOdd(7)
handle = a.zero(printNumber)
handle = a.even(printNumber)
handle = a.odd(printNumber)
运行此代码给了我一个正确的答案,但之后我没有在终端中打印出新的一行,我的意思是在我的主函数中输入7,输出是:01020304050607主机名 而不是我想要的:
01020304050607
主机名
所以,我在 main 中添加了print("\n"),我看到我得到了一个随机输出,例如:
0102
0304050607
或
0
1020304050607
最后还是没有换行。
当我尝试使用连接函数handle.join() 时,我得到了错误:
发生异常:AttributeError 'NoneType' 对象没有 属性“加入”
我尝试过这样做:
handle1 = a.zero(printNumber)
handle2 = a.even(printNumber)
handle3 = a.odd(printNumber)
handle1.join()
handle2.join()
handle3.join()
仍然出现同样的错误。 我应该在代码中的哪个位置等待线程终止?
谢谢。
【问题讨论】:
-
投票结束,因为问题中没有足够的信息。下面的答案解释了错误消息的含义,但是 OP 似乎仍然感到困惑,并且没有提供足够的代码示例来说明使他们感到困惑的原因。
-
@SolomonSlow 但是我发布了我所依赖的代码,这是链接中的解决方案,此外我发布了我编写的在 VS Code 中运行此解决方案的代码。我可以发布整个代码,它将是上述两者的结合。
标签: python multithreading wrapper