[英]Python - Threads not parallel
我的启动器代码可以启动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()
它只打印一次“ Looped”,也只运行一次“ Spawn”。 有任何想法吗?
您没有运行线程,而是在主线程中运行了Spawn
-method。 目标必须是一个函数,而不是该函数的结果:
t = threading.Thread(target=h.Spawn)
我注意到的问题:
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
时,它应该在后台运行。 现在,它不应再阻塞循环。
试试这个代码。
import Handle
import threading
h = Handle.Handle()
h.StartConnection()
for i in range(0, 5):
print("Looped")
threading.Timer(5.0, h).start()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.