文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Python进程/线程/协程相关

2023-01-31 07:09

关注

1、获取进程ID。(getpid)

os.getpid()

2、获取父进程ID。(getppid)

os.getppid()

3、获取线程ID。(get_ident)

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

import threading
threading.get_ident()
threading.current_thread().ident

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


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

#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))

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

#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 f 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 ***


阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯