python通过多线程并获取返回值
2024-10-01 02:57:52
以下是多线程获取返回值的一种实现方式
# -*-coding:utf-8-*-
from time import ctime, sleep
import threading
import numpy as np
import collections loops = ['广州', '北京']
t_list = ['', '', '']
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(六)面向对象、异常处理、反射、单例模式
- Android UI:ListView -- SimpleAdapter
- VMWARE + CENTOS在windows下配置cocos2d-x android开发环境
- laravel事务小例子
- SQL Server Reporting Services – Insufficient Rights Error
- 训练趣题:黑与白 有A、B、C、D、E五人,每人额头上都帖了一张黑或白的纸。(此处用javascript实现)
- MySQL对innodb某一个表进行移动
- Web自动化框架LazyUI使用手册(4)--控件抓取工具Elements Extractor详解(批量抓取)
- MongoDb 用 mapreduce 统计留存率
- (转)Windows 平台下解决httpd.exe: syntax error on line 39
- vs C++ scanf 不安全
- PAT (Advanced Level) Practise 1001 解题报告
- C# System.IO.StreamReader
- C-数据结构-typedef的用法
- linux select函数详解
- 洛谷1443 马的遍历【bfs】
- java poi导入Excel(个人代码)
- linux服务器的日志管理
- hdu1215-七夕节-(埃氏筛+唯一分解定理)
- C#时间戳转换[转发]