繁体   English   中英

Python-线程不平行

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM