标签:targe 参数 timeout nbsp break http 多线程 exists 调用
1、进程的线程共享进程的资源
2、线程的目的
异步:我想异步做一件事情,总的执行流继续往下走
并行(多线程):同时做很多件事情
单线程作用是异步
3、如何把一件事情放到线程中去做
import threading
t = threading.Thread(target=func,args=[])
t.start
只需掌握两个参数
1、target 后面跟做的事情 函数名
2、args 后边跟着函数的参数
import threading import time def sleep(): time.sleep(5) print(‘5 second‘) return ‘money‘ t = threading.Thread(target=sleep) t.start()
函数带参数的 (参数的小括号可以换成中括号)
原生线程调用方式缺点
1、传参数不得劲
2、函数的返回值无法得到
封装的线程类 utils.py
#coding:gbk import threading import time class FuncThread(threading.Thread): def __init__(self, func, *args, **kwargs): super(FuncThread, self).__init__() self.func = func self.args = args self.kwargs = kwargs self.finished = False self.result = None def run(self): self.result = self.func(*self.args, **self.kwargs) self.finished = True def is_finished(self): return self.finished def get_result(self): return self.result def sleep(n): time.sleep(n) print(‘sleep %s second‘ % n) return ‘money‘ def do_in_thread(func, *args, **kwargs): ft = FuncThread(func, *args, **kwargs) ft.start() return ft t = do_in_thread(sleep, 2) time.sleep(2.5) print(t.get_result())
可以拿到线程的返回结果
封装线程的使用方法
do_in_thread(func_name, 参数)
utils.py #coding:gbk import threading class FuncThread(threading.Thread): def __init__(self, func, *args, **kwargs): super(FuncThread, self).__init__() self.func = func self.args = args self.kwargs = kwargs self.finished = False self.result = None def run(self): self.result = self.func(*self.args, **self.kwargs) self.finished = True def is_finished(self): return self.finished def get_result(self): return self.result def do_in_thread(func, *args, **kwargs): ft = FuncThread(func, *args, **kwargs) ft.start() return ft
#coding:utf-8 import time import os import utils def check_file_exist(file_name): return os.path.exists(file_name)
#超时处理函数
def handle_timeout(func, timeout, *args, **kwargs): interval = 1 ret = None while timeout > 0: begin_time = time.time() ret = func(*args, **kwargs) if ret: break time.sleep(interval) timeout -= time.time() - begin_time return ret def dump_data(): time.sleep(100) f = open(r‘C:\Users\Martin\Desktop\finish‘, ‘w‘) f.close() utils.do_in_thread(dump_data) """在一分钟之内检查桌面上是否有finish这样一个文件,如果有,返回True, 如果没有,继续检查,知道超时 """ print(handle_timeout(check_file_exist, 5, r‘C:\Users\Martin\Desktop\finish‘))
标签:targe 参数 timeout nbsp break http 多线程 exists 调用
原文地址:https://www.cnblogs.com/hellojackyleon/p/9693005.html