使用Python中连接的不同方法从同一类创建线程

使用Python中连接的不同方法从同一类创建线程,python,multithreading,python-2.7,python-multithreading,Python,Multithreading,Python 2.7,Python Multithreading,类应该是泛型的,对吗?我有一个使用threading模块的多线程示例,但是它覆盖了run方法,因此实际上这个类只能创建一个连接到print\u time方法的线程。如何创建同一类的线程,但连接到不同的方法,例如print\u time\u 2 #!/usr/bin/python import threading import time exitFlag = 0 class myThread (threading.Thread): def __init__(self, threadI

类应该是泛型的,对吗?我有一个使用threading模块的多线程示例,但是它覆盖了run方法,因此实际上这个类只能创建一个连接到print\u time方法的线程。如何创建同一类的线程,但连接到不同的方法,例如print\u time\u 2

#!/usr/bin/python

import threading
import time

exitFlag = 0

class myThread (threading.Thread):
    def __init__(self, threadID, name, counter):
        threading.Thread.__init__(self)
        self.threadID = threadID
        self.name = name
        self.counter = counter
    def run(self):
        print "Starting " + self.name
        print_time(self.name, self.counter, 5)
        print "Exiting " + self.name

def print_time(threadName, delay, counter):
    while counter:
        if exitFlag:
            thread.exit()
        time.sleep(delay)
        print "%s: %s" % (threadName, time.ctime(time.time()))
        counter -= 1

def print_time_2(threadName):
    while True:
        print "Its me, %s" % (threadName)

# Create new threads
thread1 = myThread(1, "Thread-1", 1)
thread2 = myThread(2, "Thread-2", 2) #how to connect this thread to print_time_2

# Start new Threads
thread1.start()
thread2.start()

print "Exiting Main Thread"

您可以从
threading
模块导入
thread
类,然后为函数调用它(并根据需要指定参数),而不是创建自己的线程类

范例-

from threading import Thread

def print_time(threadName, delay, counter):
    while counter:
        if exitFlag:
            thread.exit()
        time.sleep(delay)
        print "%s: %s" % (threadName, time.ctime(time.time()))
        counter -= 1

def print_time_2(threadName):
    while True:
        print "Its me, %s" % (threadName)

t1 = Thread(target=print_time, args=(1, "Thread-1", 1) )
t2 = Thread(target=print_time_2, args=("Thread-2" , ) )

t1.start()
t2.start()
python线程类的文档-


是的,如果args只包含一个参数,则需要最后一个“,”,如示例所示。

如果您想继续使用类(好主意):


构建两个新类,继承myThread,同时实现打印时间函数。

好吧,我找到了解决问题的这种方法。你能评论一下吗,是好是坏?不过对我来说没问题

import threading
import time

class FuncThread(threading.Thread):
    def __init__(self, target, *args):
        self._target = target
        self._args = args
        threading.Thread.__init__(self)

    def run(self):
        self._target(*self._args)

# Example usage
def someOtherFunc(data, key):
    while True:
        print "Thread 1: data=%s; key=%s" % (str(data), str(key))
        time.sleep(1)

def someOtherFunc2():
    while True:
        print "Thread 2"
        time.sleep(0.2)

t1 = FuncThread(someOtherFunc, [1,2], 6)
t2 = FuncThread(someOtherFunc2)
t1.start()
t2.start()

支持从
线程
类派生是Python的一个错误选择,首先,您也不能为了访问文件而从
文件
派生。使用这种方法是一个很好的建议!类不应该是泛型的,而应该是具体的。说真的,除非你准确地定义“generic”的意思,否则我只能假设这个词的典型用法,它有它的优点和缺点,但它会生成很多代码。使用一个类来创建多个线程不是更好吗?它不会生成比您编写的代码更多的代码,只需要两行新行就可以在继承myThread的类中打印函数。仍然喜欢我的版本,但它显然取决于上下文、实现的差异。。。