我遇到的情况是必须调用两个不同的方法才能并行运行。我正在使用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-结束
答案 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()