Python - 线程不平行

时间:2016-01-07 06:44:35

标签: python multithreading parallel-processing

我的转轮代码启动了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"曾经也是。有什么想法吗?

3 个答案:

答案 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()