liuhongyu 发表于 2018-8-6 12:55:55

Python进程/线程/协程相关

#encoding=utf-8  
#author: walker
  
#date: 2017-03-27
  
#summary: 使用线程池完成阻塞型任务
  
#Python 3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 18:41:36) 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]
查看完整版本: Python进程/线程/协程相关