美文网首页测试
[Python系列]Python多线程

[Python系列]Python多线程

作者: 测试你个头 | 来源:发表于2017-07-26 00:09 被阅读18次

背景:说到多线程,我们会想到的是:异步编程、同步(锁)、共享变量、线程池等等,那么Python里面多线程是如何实现的?

1.新建一个线程

import threading

// target是线程需要执行的方法,args是线程方法需要传入的参数
t1 = threading.Thread(target=processservice.biz_monitor_process, args=(src.globals.xspace_im_monitored_process, 5))  
t1.setDaemon(true) //设置线程为守护线程
t1.start()

im_page = xspaceimpageservice.XSpaceImPageService()

// 无需传参
t3 = threading.Thread(target=im_page.biz_servicer_chat)
t3.start()
t3.join()

2.线程同步(锁)

  • 线程同步常见的一种实现方式是在竞争资源上添加锁,保证同一时间最多只有一个线程在访问竞争资源
  • Python的threading 模块提供的线程同步对象包括:Lock、RLock、Condition、Event、Semaphore等。

以Lock为例:

  • 创建锁对象
mutex = thread.allocate_lock()
mutex = threading.Lock()
  • 加锁
    这里timeout的作用是加锁的超时时间,如果超过超时时间,可以通过返回值判断加锁是否成功
mutex.acquire([timeout])
  • 释放锁
mutex.release()
  • 范例代码:
// 创建一个lock实例
mutex = threading.Lock()
// 加锁
if mutex.acquire(1):  
            // 线程互斥执行的代码
            num = num+1
            msg = self.name+' set num to '+str(num)
            print msg
            // 释放锁
            mutex.release()

3.线程池
如果需要使用线程池的话,需要首先安装threadpool包

pip install threadpool 

范例code

// 实例一个线程数为poolsize的线程池
pool = threadpool.ThreadPool(poolsize)  

// makeRequests传入需要线程执行的方法,以及参数,最后的callback非必选,默认为空,创建线程任务
requests = pool.makeRequests(some_callable, list_of_args, callback)  

// 这里用map函数,将线程任务放到线程池中
map(pool.putRequest,request_list) 

// wait方法是一个阻塞方法,用于等待线程池中所有线程执行完后返回
pool.wait() 

相关文章

  • [Python系列]Python多线程

    背景:说到多线程,我们会想到的是:异步编程、同步(锁)、共享变量、线程池等等,那么Python里面多线程是如何实现...

  • GIL

    谈谈python的GIL、多线程、多进程 最近在看 Python 的多线程,经常我们会听到老手说:“python下...

  • Python协程

    本文主要介绍一下协程的基本概念、对比多线程的优势,以及Python2.x系列和Python3.x系列的大体差别 I...

  • 男子大学生的無駄日常

    关键词:Python,爬虫,requests,BeautifulSoup,opencv,python多线程,正则表...

  • 5-线程(补充)

    Python多线程原理与实战 目的: (1)了解python线程执行原理 (2)掌握多线程编程与线程同步 (3)了...

  • Python_提高

    GIL全局解释器锁 描述Python GIL的概念, 以及它对python多线程的影响?编写⼀个 多线程抓取⽹⻚的...

  • Python程序员都知道的入门知识の八

    目录【Python程序员都知道的入门知识】 1. 多线程threading、Queue Python的多线程由th...

  • Python多线程实现生产者消费者

    1. Python多线程介绍 Python提供了两个有关多线程的标准库,thread和threading。thre...

  • 多线程

    Python多线程原理与实战 目的: (1)了解python线程执行原理 (2)掌握多线程编程与线程同步 (3)了...

  • Python多线程编程——多线程编程中的加锁机制

    如果大家对Python中的多线程编程不是很了解,推荐大家阅读之前的两篇文章:Python多线程编程——多线程基础介...

网友评论

    本文标题:[Python系列]Python多线程

    本文链接:https://www.haomeiwen.com/subject/wmguqxtx.html