如何解决我在Python中面临的多线程问题

时间:2019-06-06 12:00:17

标签: python-3.x multithreading python-multithreading

我遇到的情况是必须调用两个不同的方法才能并行运行。我正在使用Python线程模块来实现此目的。但是,它们不是顺序运行的两个方法,而是顺序运行的。有人可以指导我代码中的错误吗?

这是针对Python 3.5的,它使用线程模块,并且具有一个带有两种不同方法的类,这些类必须并行运行。

## This is in template.py
from threading import Thread
import time
class createTemplate:
    def __init__(self,PARAM1):
        self.PARAM1=PARAM1

    def method1(self):
        print("Method1-START")
        time.sleep(120)
        print("Method1-END")

    def method2(self):
        print("Method2-START")
        time.sleep(120)
        print("Method2-END")

    def final_method(self):
        if self.PARAM1=="1":
           m1=Thread(target=self.method1)
           m1.run()

        if self.PARAM1=="1":
           m2=Thread(target=self.method2)
           m2.run()

## This is in createTemplate.py
from template import createTemplate

template = createTemplate("1")
template.final_method()

实际输出:

  

方法1-开始   方法1-结束   方法2-开始   方法2-结束

预期输出:

  

方法1-开始   方法2-开始   方法1-结束   方法2-结束

1 个答案:

答案 0 :(得分:1)

您应该致电.run()而不是.start()

Thread.run()将在当前线程的上下文中运行代码,但是Thread.start()实际上将产生一个新线程,并与现有线程并行地在其上运行代码。

尝试一下:

from threading import Thread
import time
class createTemplate:
    def __init__(self,PARAM1):
        self.PARAM1=PARAM1

    def method1(self, arg):
        print("Method1-START",arg)
        time.sleep(5)
        print("Method1-END",arg)

    def method2(self,arg):
        print("Method2-START",arg)
        time.sleep(5)
        print("Method2-END",arg)

    def final_method(self):
        if self.PARAM1=="1":
           m1=Thread(target=self.method1, args=("A", )) # <- this is a tuple of size 1
           m1.start()

        if self.PARAM1=="1":
           m2=Thread(target=self.method2, args=("B", )) # <- this is a tuple of size 1
           m2.start()