【问题标题】:Python Threading - Make threads start without waiting for previous thread to finishPython Threading - 使线程开始而不等待前一个线程完成
【发布时间】:2017-11-24 23:20:00
【问题描述】:

我希望我的所有线程同时启动,但在我的代码中,它会等待前一个线程完成它的进程,然后再启动一个新线程。我希望所有线程并行启动。

我的代码:

class Main(object):

    start = True
    config = True
    givenName = True

    def obscure(self, i):
        i = i

        while self.start:
            Config.userInfo(i)
            break
        while self.config:
            Config.open()
            break
        while self.givenName:
            Browser.openSession()
            break

Main = Main()

while __name__=='__main__':
    Config.userInfo()
    Config.open()
    for i in range(len(Config.names)):
        Task = Thread(target=Main.obscure(i))
        Task.start()
    break

【问题讨论】:

  • 它不应该等待,因为您没有在任何地方使用 join。你的其他代码是什么?
  • 你认为它为什么在等待?
  • @wwii 因为当我收到我的代码结尾(打开网络浏览器)时,下一个线程开始它的开始进程(打印一些代码)
  • @atru 我刚刚用我的完整文件编辑了帖子
  • 请记住,多线程不是多处理。 Python 一次只会运行一个线程,即使许多线程可能同时处于“活动”状态。其他一些注意事项:在您有 while 语句的任何地方,都可以将其替换为 if 并删除 break 语句。 i = i 语句没有作用,可以去掉。

标签: python multithreading python-2.7


【解决方案1】:

这一行是主要问题:

Task = Thread(target=Main.obscure(i))

target 传递的是 调用 Main.obscure(i) 的结果,不是要在线程中运行的函数。您当前正在主线程中运行该函数,然后基本上传递target=None

你想要:

Task = Thread(target=Main.obscure, args=(i,))

然后,Thread 将安排在线程内使用列出的参数调用Main.obscure

另外,Main = Main() 用 Main 的一个实例覆盖了 class Main 声明......但是由于您丢失了对该类的引用,您将永远无法创建另一个实例。使用其他名称,例如main = Main()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多