python中如何对类的成员函数开启线程?

问题描述

python中如何对类的成员函数开启线程?

单独对某个函数开启线程是可以的,比如下面的代码:
import threading
import thread
import time
def doWaiting():
print 'start waiting:', time.strftime('%H:%M:%S')
time.sleep(3)
print 'stop waiting', time.strftime('%H:%M:%S')
thread1 = threading.Thread(target = doWaiting)
thread1.start()
time.sleep(1) #确保线程thread1已经启动
print 'start join'
thread1.join() #将一直堵塞,直到thread1运行结束。
print 'end join'

但是对类的成员函数开启线程,程序报错:
th1 = threading.Thread(target = Test.buildList , (self ,))
SyntaxError: non-keyword arg after keyword arg

程序如下:
import threading
import thread
import time
class Test(object):
def init(self):
#threading.Thread.__init__(self)
self._sName = "machao"

def process(self):
    th1 = threading.Thread(target = Test.buildList , (self ,))
    th1.start()
    th1.join()

def buildList(self):
    while True:
        print "start"
        time.sleep(3)

test = Test()
test.process()

解决方案

target = self.buildList
要用self而不是test

时间: 2024-10-31 23:33:34

python中如何对类的成员函数开启线程?的相关文章

C++中怎么获取类的成员函数的函数指针?

用一个实际代码来说明. class A { public:     staticvoid staticmember(){cout<<"static"<<endl;}   //static member     void nonstatic(){cout<<"nonstatic"<<endl;}          //nonstatic member     virtualvoid virtualmember(){cou

c++-MFC怎么在普通的函数中操作窗口类的成员变量

问题描述 MFC怎么在普通的函数中操作窗口类的成员变量 例如我想在函数f中操作CtestDlg类的变量e.该怎么做? 解决方案 定义一个全局变量 CtestDlg dlg 创建对话框给它赋值 e定义成public的 用dlg.e 得到变量. 解决方案二: 类的普通成员函数的指针类普通成员函数与函数的区别类成员函数与普通函数的区别 解决方案三: 给函数传入形参,用引用&实现

在Python中使用元类的教程

  这篇文章主要介绍了在Python中使用元类的教程,是Python当中的基础知识,代码基于Python2.x版本,需要的朋友可以参考下 type() 动态语言和静态语言最大的不同,就是函数和类的定义,不是编译时定义的,而是运行时动态创建的. 比方说我们要定义一个Hello的class,就写一个hello.py模块: ? 1 2 3 class Hello(object): def hello(self, name='world'): print('Hello, %s.' % name) 当Py

c++-为什么这段代码中对象rectangle的各个成员函数输出的值是对的,而box的却都是错的

问题描述 为什么这段代码中对象rectangle的各个成员函数输出的值是对的,而box的却都是错的 #include using namespace std; class rectangle { protected: double length,width,l,w; public: void setlength(); void getlength(); void setwidth(); void getwidth(); double area(); double perimeter(); dou

c++,关于类成员函数作为线程的入口函数

问题描述 c++,关于类成员函数作为线程的入口函数 class Map {public: Bird *pB; Pig *pP; ..........}class Grav {public: Map *pM; ...... void runBird(Bird &b); void runPig(Pig &p); void run(Map &m);}void Grav::run(Map &m) { thread t[2]; t[0] = thread(&Grav::run

深入类的成员函数指针

先看这样一段代码   class test { public:      test(int i){ m_i=i;}      test(){};      void hello()     {          printf("hello/n");     } private:     int m_i; }; int main() {  test *p=new test();  p->hello();  p=NULL;  p->hello(); }   结果是: hello

一般函数指针和类的成员函数指针深入解析_C 语言

函数指针是通过指向函数的指针间接调用函数.函数指针可以实现对参数类型.参数顺序.返回值都相同的函数进行封装,是多态的一种实现方式.由于类的非静态成员函数中有一个隐形的this指针,因此,类的成员函数的指针和一般函数的指针的表现形式不一样. 1.指向一般函数的指针函数指针的声明中就包括了函数的参数类型.顺序和返回值,只能把相匹配的函数地址赋值给函数指针.为了封装同类型的函数,可以把函数指针作为通用接口函数的参数,并通过函数指针来间接调用所封装的函数.下面是一个指向函数的指针使用的例子. 复制代码

class-关于类的成员函数问题

问题描述 关于类的成员函数问题 Person::Person(const std::string&ln, const char*fn = "Heyyou") 这是在类申明中的一个成员函数声明,为什么在在定义这个函数的时候会重定义?该怎么解决? 解决方案 重定义要么是同样的函数重载参数形式的函数定义了好几个,要么虽然你没有这么做,但是你重复用include包含了定义函数的源代码. 解决方案二: 类的成员函数类模板成员函数的调用问题c++ 类中的成员函数在内存空间的分配问题

c++-C++的类的成员函数问题为什么re()不能进行初始化?而setpoint()函数可以?

问题描述 C++的类的成员函数问题为什么re()不能进行初始化?而setpoint()函数可以? 如题,我知道第一个rectangle是构造函数,所以要与类同名,然后可以初始化赋值,为什么另一个程序setpoint明明不是构造函数,但是可以做赋值处理,然后程序不会报错呢?我把rectangle类里的rectangle函数改成re却是会报错,不用说void re,我试过了,还是会报错.第四张图我直接把构造函数删除掉了,程序正常运行,但是我不懂为什么re不管怎么改都会报错,请各位大神为我解答.谢谢