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



类应该是通用的,对吗?我有一个使用threading模块的多线程示例,但是它覆盖了run方法,所以实际上这个类只能创建一个连接到print_time方法的线程。我如何使线程的同一类,但连接到不同的方法,例如print_time_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线程类文档- https://docs.python.org/2/library/threading.html

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

如果你想坚持使用类(好主意):

构建两个新类,从myThread继承,它们都实现了print_time函数

嗯,我已经找到了解决问题的方法。你能评论一下吗,是好是坏?不过它对我来说还行……

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()

相关内容

  • 没有找到相关文章

最新更新