python通过多线程并获取返回值

Posted zongfa

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python通过多线程并获取返回值相关的知识,希望对你有一定的参考价值。

以下是多线程获取返回值的一种实现方式

# -*-coding:utf-8-*-
from time import ctime, sleep
import threading
import numpy as np
import collections
 
loops = [广州, 北京]
t_list = [01, 02, 03]
cldas_sum = collections.deque()
 
 
class MyThread(threading.Thread):
    def __init__(self, func, args, name=‘‘):
        threading.Thread.__init__(self)
        self.name = name
        self.func = func
        self.args = args
        self.result = self.func(*self.args)
 
    def get_result(self):
        try:
            return self.result
        except Exception:
            return None
 
 
def loop(nloop):
    for j in t_list:
        cldas_values = []
        for k in range(4):
            cldas_value = nloop + str(k)
            cldas_values.append(cldas_value)
        cldas_values.append(j)
        cldas_values.append(nloop)
        cldas_sum.append(cldas_values)
        print(id(cldas_values))
    #print(cldas_sum)
    return cldas_sum
 
 
def main():
    print(start at, ctime())
    threads = []
    nloops = range(len(loops))
    for i in nloops:
        t = MyThread(loop, (loops[i],), loop.__name__)
        threads.append(t)
    for i in nloops:   # start threads 此处并不会执行线程,而是将任务分发到每个线程,同步线程。等同步完成后再开始执行start方法
        threads[i].start()
    for i in nloops:   # jion()方法等待线程完成
        threads[i].join()
    print(threads[1].get_result())
    print(DONE AT:, ctime())
 
 
if __name__ == __main__:
    main()

需要注意的是:

如果多个线程共用一个公共数据,那么我们需要做的就是将这个公共数据设置成队列格式,要不然多个线程共同访问这个数据可能会出错,需要加锁。设置成队列比加锁再放锁效率高多了

以上是关于python通过多线程并获取返回值的主要内容,如果未能解决你的问题,请参考以下文章

Python通过多线程实现 `异步`

python实现从FTP下载文件通过多线程同时分发到多台机器

如何通过多线程使用socket和pyqt避免数据丢失

在 Table Storage azure 中使用 Etag 通过多线程更新属性

python 多线程 访问网站

通过多线程(任务)运行方法的有效方法[重复]