python的Threading怎么返回值

Success1024 发布于 2016/05/17 16:22
阅读 2K+
收藏 0

python多线程使用了Threading模块,在run()函数中使用了一个带返回值的函数


class QueryWork(Thread):
    data=[]
    def __init__(self,queue,target,func_list=None):
        Thread.__init__(self)
        self.queue=queue
        self.target=target
    def run(self):
        mutex=threading.Lock()
        try:
            while 1:
                mutex.acquire()
                api=self.queue.get(False)
                q=Query(self.target)
                api,flag=q.queryRegister(api)
                print api['website'],api['weburl'],flag
                mutex.release()

        except Exception,e:
            pass



queryRegister() 函数会返回api,flag两个值,怎么把这两个值return返回呢, 现在只能在自己函数里打印,因为现在想把内容返回输出到页面上,而不是在控制台打印,怎么写呢
加载中
0
一碗粥
一碗粥
class QueryWork(Thread):
    api={}
    flag=''
    def __init__(self,queue,target,func_list=None, hook):
        Thread.__init__(self)
        self.queue=queue
        self.target=target
        self.hook = hook
 
    def run(self):
        mutex=threading.Lock()
        try:
            while 1:
                mutex.acquire()
                api=self.queue.get(False)
                q=Query(self.target)
                self.api,self.flag=q.queryRegister(api)
                self.hook(self.api, self.flag)
                print self.api['website'],self.api['weburl'],self.flag
                mutex.release()
 
        except Exception,e:
            pass
 
    def getRet(self):
        return (self.api, self.flag)


def hook(zapi, zflag):
    print zapi, zflag
0
一碗粥
一碗粥

把api和flag变成class的成员变量

在加一个函数不就行了.

def getRet():

    return (self.api, self.flag)

0
一碗粥
一碗粥
又或者, 你在构造函数里多加一个参数, 是个回调函数. 把api和flag勾回去吗.
0
S
Success1024

引用来自“一碗粥”的评论

把api和flag变成class的成员变量

在加一个函数不就行了.

def getRet():

    return (self.api, self.flag)

class QueryWork(Thread):
    api={}
    flag=''
    def __init__(self,queue,target,func_list=None):
        Thread.__init__(self)
        self.queue=queue
        self.target=target

    def run(self):
        mutex=threading.Lock()
        try:
            while 1:
                mutex.acquire()
                api=self.queue.get(False)
                q=Query(self.target)
                self.api,self.flag=q.queryRegister(api)
                print self.api['website'],self.api['weburl'],self.flag
                mutex.release()

        except Exception,e:
            pass

    def getRet(self):
        return (self.api, self.flag)



qwork=QueryWork(queue,'haodaoyx@126.com') qwork.start() print qwork.getRet() 最后输出是空

0
S
Success1024

引用来自“一碗粥”的评论

又或者, 你在构造函数里多加一个参数, 是个回调函数. 把api和flag勾回去吗.
求大神教怎么勾,在线等。。。
0
S
Success1024

引用来自“一碗粥”的评论

class QueryWork(Thread):
    api={}
    flag=''
    def __init__(self,queue,target,func_list=None, hook):
        Thread.__init__(self)
        self.queue=queue
        self.target=target
        self.hook = hook
 
    def run(self):
        mutex=threading.Lock()
        try:
            while 1:
                mutex.acquire()
                api=self.queue.get(False)
                q=Query(self.target)
                self.api,self.flag=q.queryRegister(api)
                self.hook(self.api, self.flag)
                print self.api['website'],self.api['weburl'],self.flag
                mutex.release()
 
        except Exception,e:
            pass
 
    def getRet(self):
        return (self.api, self.flag)


def hook(zapi, zflag):
    print zapi, zflag
大神,你这个hook是打印,我用了flask,关键是这两个值怎么输出给页面
一碗粥
一碗粥
你把打印改成你调用QueryWork的地方的变量不就行了. def hook(zapi, zflag): xxx.api = zapi xxx.flag = zflag
一碗粥
一碗粥
你页面别的值是怎么拿的, 这两个值怎么拿.
返回顶部
顶部