python 多线程,,1、进程的线程共享进


1、进程的线程共享进程的资源

2、线程的目的

异步:我想异步做一件事情,总的执行流继续往下走

并行(多线程):同时做很多件事情

单线程作用是异步

3、如何把一件事情放到线程中去做

import threading

t = threading.Thread(target=func,args=[])
t.start

只需掌握两个参数

1、target 后面跟做的事情 函数名

2、args 后边跟着函数的参数

import threadingimport timedef sleep():    time.sleep(5)    print(‘5 second‘)    return ‘money‘t = threading.Thread(target=sleep)t.start()

技术分享图片

函数带参数的 (参数的小括号可以换成中括号)

技术分享图片

技术分享图片

原生线程调用方式缺点

1、传参数不得劲

2、函数的返回值无法得到

封装的线程类 utils.py

#coding:gbkimport threadingimport timeclass 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.resultdef 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 ftt = do_in_thread(sleep, 2)time.sleep(2.5)print(t.get_result())

技术分享图片

可以拿到线程的返回结果

封装线程的使用方法

do_in_thread(func_name,参数)

多线程怎么办?在for循环中起多个单线程即可

技术分享图片

utils.py#coding:gbkimport threadingclass 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.resultdef do_in_thread(func, *args, **kwargs):    ft = FuncThread(func, *args, **kwargs)    ft.start()    return ft


#coding:utf-8import timeimport osimport utilsdef 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 retdef 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‘))

python 多线程

评论关闭