我的转轮代码启动了5个线程,但是,它只启动1个线程(我知道因为它没有循环),看一下代码:
import Handle
import threading
h = Handle.Handle()
h.StartConnection()
for i in range(0, 5):
print("Looped")
t = threading.Thread(target=h.Spawn())
t.start()
它只打印"循环"曾经只运行" Spawn"曾经也是。有什么想法吗?
答案 0 :(得分:2)
您没有运行线程,您在主线程中运行TAG
- 方法。 target需要是一个函数,而不是该函数的结果:
Spawn
答案 1 :(得分:2)
我注意到的问题:
t
变量。所以最后你只需要分配一个线程。 Spawn
函数是否返回函数?如果确实如此,那就没关系,否则你应该将Spawn
传递给目标,而不是调用Spawn()
。 Spawn
函数本质上是长期运行的(我假设它是),那么对Spawn
函数的调用将阻塞循环并等待它返回。这就是为什么你的循环可能会打印“循环”一次,而Spawn函数也只被调用一次。我的建议是这样的:
import Handle
import threading
h = Handle.Handle()
h.StartConnection()
threads = []
for i in range(0, 5):
print("Looped")
t = threading.Thread(target=h.Spawn)
threads.append(t)
t.start()
我拿了一个列表来存储线程 - threads
列表。然后在调用start
之前附加每个线程。现在我可以随时迭代threads
列表(可能是join
他们?)。
此外,由于我假设Spawn
是一个长时间运行的函数,我将它作为目标传递给Thread
构造函数。因此,当我们在线程上调用start
时,它应该在后台运行。现在它应该不再阻止循环。
答案 2 :(得分:0)
试试这段代码。
import Handle
import threading
h = Handle.Handle()
h.StartConnection()
for i in range(0, 5):
print("Looped")
threading.Timer(5.0, h).start()