码迷,mamicode.com
首页 > 编程语言 > 详细

python 多线程

时间:2018-09-23 18:25:40      阅读:261      评论:0      收藏:0      [点我收藏+]

标签: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, 参数)

 

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

 

 技术分享图片

 

 

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(rC:\Users\Martin\Desktop\finish, w) f.close() utils.do_in_thread(dump_data) """在一分钟之内检查桌面上是否有finish这样一个文件,如果有,返回True, 如果没有,继续检查,知道超时 """ print(handle_timeout(check_file_exist, 5, rC:\Users\Martin\Desktop\finish))

 

python 多线程

标签:targe   参数   timeout   nbsp   break   http   多线程   exists   调用   

原文地址:https://www.cnblogs.com/hellojackyleon/p/9693005.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!