Python进程/线程/协程相关

简介:

1、获取进程ID。(getpid

1
os.getpid()

2、获取父进程ID。(getppid

1
os.getppid()

3、获取线程ID。(get_ident

(1)、进程内局部标识。

1
2
3
import  threading
threading.get_ident()
threading.current_thread().ident

(2)、系统全局标识:python下使用ctypes获取threading线程id


【使用线程池完成阻塞型任务】

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#encoding=utf-8
#author: walker
#date: 2017-03-27
#summary: 使用线程池完成阻塞型任务
#Python 3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 18:41:36) [MSC v.1900 64 bit (AMD64)] on win32
  
import  time
import  random
import  threading
import  concurrent.futures
 
#同步型任务
def  TaskSync(taskid, sleepTime):
     print ( 'thread_%05d %s sleep %d ...'  %  (threading.get_ident(), taskid, sleepTime))
     time.sleep(sleepTime)    #睡觉任务
     print ( '\t\tthread_%05d %s sleep %d over'  %  (threading.get_ident(), taskid, sleepTime))
     return  taskid, sleepTime
     
#处理所有任务
def  ProcAll(taskList):
     pool  =  concurrent.futures.ThreadPoolExecutor( 4 )  
     futureList  =  list ()
     for  taskid, sleepTime  in  taskList:   #提交所有任务
         futureList.append(pool.submit(TaskSync, taskid, sleepTime))
     
     totalSleepTime  =  0
     for  future  in  concurrent.futures.as_completed(futureList):
         task, sleepTime  =  future.result()
         print ( '\t\t\t\t\t\t%s sleep %d over'  %  (task, sleepTime))
         totalSleepTime  + =  sleepTime
         
     return  totalSleepTime
     
if  __name__  = =  '__main__' :
     startTime  =  time.time()
     taskList  =  [( 'task_%d'  %  id , random.randint( 1 5 ))  for  id  in  range ( 0 9 )]
     print ( 'taskList:%s'  %  repr (taskList))
     totalSleepTime  =  ProcAll(taskList)
     print ( 'totalSleepTime: %d s'  %  totalSleepTime)
     print ( 'real cost time:%.2f'  %  (time.time()  -  startTime))

【使用单线程完成异步型任务】

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#encoding=utf-8
#author: walker
#date: 2017-03-27
#summary: 使用单线程完成异步型任务
#Python 3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 18:41:36) [MSC v.1900 64 bit (AMD64)] on win32
  
import  asyncio
import  time
import  random
 
#协程型任务 
async  def  TaskAsync(taskid, sleepTime):
     print ( '%s sleep %d ...'  %  (taskid, sleepTime))
     await asyncio.sleep(sleepTime)  #睡觉任务
     print ( '\t%s sleep %d over'  %  (taskid, sleepTime))
     return  taskid, sleepTime
 
#处理所有任务
async  def  ProcAll(taskList):
     coroutineList  =  list ()
     for  taskid, sleepTime  in  taskList:
         coroutineList.append(asyncio.ensure_future((TaskAsync(taskid, sleepTime))))   
     
     totalSleepTime  =  0
     for  in  asyncio.as_completed(coroutineList):
         task, sleepTime  =  await f
         print ( '\t\t\t%s sleep %d over'  %  (task, sleepTime))
         totalSleepTime  + =  sleepTime
     return  totalSleepTime
 
if  __name__  = =  '__main__' :
     startTime  =  time.time()
     taskList  =  [( 'task_%d'  %  id , random.randint( 1 5 ))  for  id  in  range ( 0 9 )]
     print ( 'taskList:%s'  %  repr (taskList))
     loop  =  asyncio.get_event_loop()
     totalSleepTime  =  loop.run_until_complete(ProcAll(taskList))
     print ( 'totalSleepTime: %d s'  %  totalSleepTime)
     print ( 'real cost time:%.2f'  %  (time.time()  -  startTime))


相关阅读:

1、Python自定义进程池(生产者/消费者模型)

2、asyncio — Asynchronous I/O, event loop, coroutines and tasks

3、concurrent.futures — Launching parallel tasks

4、multiprocessing — Process-based parallelism

5、协程与async/await语法(PEP 0492 Coroutines with async and await syntax 中文翻译)

6、Python协程:从yield/send到async/await


*** walker ***

本文转自walker snapshot博客51CTO博客,原文链接http://blog.51cto.com/walkerqt/1893879如需转载请自行联系原作者


RQSLT

相关文章
|
1月前
|
调度 开发者 Python
深入浅出操作系统:进程与线程的奥秘
在数字世界的底层,操作系统扮演着不可或缺的角色。它如同一位高效的管家,协调和控制着计算机硬件与软件资源。本文将拨开迷雾,深入探索操作系统中两个核心概念——进程与线程。我们将从它们的诞生谈起,逐步剖析它们的本质、区别以及如何影响我们日常使用的应用程序性能。通过简单的比喻,我们将理解这些看似抽象的概念,并学会如何在编程实践中高效利用进程与线程。准备好跟随我一起,揭开操作系统的神秘面纱,让我们的代码运行得更加流畅吧!
|
1月前
|
消息中间件 Unix Linux
【C语言】进程和线程详解
在现代操作系统中,进程和线程是实现并发执行的两种主要方式。理解它们的区别和各自的应用场景对于编写高效的并发程序至关重要。
63 6
|
1月前
|
调度 开发者
深入理解:进程与线程的本质差异
在操作系统和计算机编程领域,进程和线程是两个核心概念。它们在程序执行和资源管理中扮演着至关重要的角色。本文将深入探讨进程与线程的区别,并分析它们在现代软件开发中的应用和重要性。
63 5
|
1月前
|
算法 调度 开发者
深入理解操作系统:进程与线程的管理
在数字世界的复杂编织中,操作系统如同一位精明的指挥家,协调着每一个音符的奏响。本篇文章将带领读者穿越操作系统的幕后,探索进程与线程管理的奥秘。从进程的诞生到线程的舞蹈,我们将一起见证这场微观世界的华丽变奏。通过深入浅出的解释和生动的比喻,本文旨在揭示操作系统如何高效地处理多任务,确保系统的稳定性和效率。让我们一起跟随代码的步伐,走进操作系统的内心世界。
|
1月前
|
调度 开发者
核心概念解析:进程与线程的对比分析
在操作系统和计算机编程领域,进程和线程是两个基本而核心的概念。它们是程序执行和资源管理的基础,但它们之间存在显著的差异。本文将深入探讨进程与线程的区别,并分析它们在现代软件开发中的应用和重要性。
61 4
|
2月前
|
数据采集 存储 数据处理
Python中的多线程编程及其在数据处理中的应用
本文深入探讨了Python中多线程编程的概念、原理和实现方法,并详细介绍了其在数据处理领域的应用。通过对比单线程与多线程的性能差异,展示了多线程编程在提升程序运行效率方面的显著优势。文章还提供了实际案例,帮助读者更好地理解和掌握多线程编程技术。
|
2月前
|
监控 JavaScript 前端开发
python中的线程和进程(一文带你了解)
欢迎来到瑞雨溪的博客,这里是一位热爱JavaScript和Vue的大一学生分享技术心得的地方。如果你从我的文章中有所收获,欢迎关注我,我将持续更新更多优质内容,你的支持是我前进的动力!🎉🎉🎉
32 0
|
2月前
|
数据采集 Java Python
爬取小说资源的Python实践:从单线程到多线程的效率飞跃
本文介绍了一种使用Python从笔趣阁网站爬取小说内容的方法,并通过引入多线程技术大幅提高了下载效率。文章首先概述了环境准备,包括所需安装的库,然后详细描述了爬虫程序的设计与实现过程,包括发送HTTP请求、解析HTML文档、提取章节链接及多线程下载等步骤。最后,强调了性能优化的重要性,并提醒读者遵守相关法律法规。
74 0
|
6月前
|
运维 关系型数据库 MySQL
掌握taskset:优化你的Linux进程,提升系统性能
在多核处理器成为现代计算标准的今天,运维人员和性能调优人员面临着如何有效利用这些处理能力的挑战。优化进程运行的位置不仅可以提高性能,还能更好地管理和分配系统资源。 其中,taskset命令是一个强大的工具,它允许管理员将进程绑定到特定的CPU核心,减少上下文切换的开销,从而提升整体效率。
掌握taskset:优化你的Linux进程,提升系统性能
|
6月前
|
弹性计算 Linux 区块链
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)
204 4
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)