python多线程使用thread

python 使用多线程的几个要点:

  • 执行定时任务:
import sched
import threading
import time


def new_task(function, delay_time, args):
    """
    定时任务函数
    :param function: 需要执行的函数
    :param delay_time:  延迟多少时间执行
    :param args:  需要给function函数传递的参数,是个tuple
    :return: 
    """
    scheduler = sched.scheduler(time.time, time.sleep)
    scheduler.enter(delay_time, 10, function, args)
    thread = threading.Thread(target=scheduler.run)
    thread.start()

    return thread

# 我们写一个初始function函数
def helloworld(what):
    print 'this is {}'.format(what)
# 如何调用定时执行这个helloworld函数
new_task(hellowrold, 3 ('what', ))  # 3秒后执行helloworld函数
  • 多线程处理高并发— 线程锁
import threading
L = threading.Lock()

def helloworld(what, ThreadName):
    L.acquire() # 线程锁
    print 'this is {}, and this is ThreadName: {}'.format(what, ThreadName)
    L.release() # 释放锁
# for 循环多次执行这个函数
for i in range(20):
    new_task(hellowrold, 3 ('what', 'thread-name-{}'.format(i))
# 这样每次就会执行一次函数,当函数释放锁之后才执行下一次,
# L.acquire() 和 L.release() 是成对使用的
  • 多线程处理高并发 – 线程池
import multiprocessing

def print_time(s, threadNname, delay, **kwargs):
    if kwargs.get('lock', None) is not None:
        print('get lock')
        kwargs.get('lock').acquire()
    count = 0
    while count < 5:
        time.sleep(delay)
        count += 1
        print('this thread name is {threadname} and 当前时间是 {timename}'.format(timename=time.ctime(time.time()),
                                                                             threadname=threadNname))
    if kwargs.get('lock', None) is not None:
        kwargs.get('lock').release()
    pass

s = multiprocessing.Semaphore(2)  #设置线程池的大小,每次只可以而同事启动2个线程

for i in range(20):
    """
    入口函数
    """
    p = multiprocessing.Process(target=print_time, args=(s, 'xiancheng{}'.format(i), 3), kwargs={'lock':s})
    p.start()

猜你喜欢

转载自blog.csdn.net/qq_34971175/article/details/79666555
今日推荐