Problems

一次只执行5个任务,执行完5个再去执行下面5个

Source Code

#!/usr/bin/python
# -*- coding: utf-8 -*-
# @Time   : 2021/6/12 12:00
# @Author : SandQuant

import time
import datetime
import threading


max_connections = 5  # 定义最大线程数
pool_sema = threading.BoundedSemaphore(max_connections)  # 或使用Semaphore方法


def loop(i):  # 任务
    pool_sema.acquire()  # 加锁,限制线程数

    print('assignment %s start %s' % (i, datetime.datetime.today()))
    time.sleep(2)
    print('assignment %s end %s' % (i, datetime.datetime.today()))

    pool_sema.release()  # 解锁


thread_list = []
for i in range(12):  # 12个任务
    t = threading.Thread(target=loop, args=[i])
    thread_list.append(t)

for t in thread_list:
    t.start()  # 调用start()方法,开始执行

for t in thread_list:
    t.join()  # 子线程调用join()方法,使主线程等待子线程运行完毕之后才退出



Output

assignment 0 start 2021-11-05 12:02:49.976221
assignment 1 start 2021-11-05 12:02:49.976221
assignment 2 start 2021-11-05 12:02:49.976221
assignment 3 start 2021-11-05 12:02:49.976221
assignment 4 start 2021-11-05 12:02:49.976221
assignment 1 end 2021-11-05 12:02:51.986168assignment 3 end 2021-11-05 12:02:51.986168assignment 2 end 2021-11-05 12:02:51.986168assignment 0 end 2021-11-05 12:02:51.986168assignment 4 end 2021-11-05 12:02:51.986168



assignment 5 start 2021-11-05 12:02:51.986168
assignment 8 start 2021-11-05 12:02:51.986168assignment 7 start 2021-11-05 12:02:51.986168

assignment 6 start 2021-11-05 12:02:51.986168

assignment 9 start 2021-11-05 12:02:51.986168
assignment 5 end 2021-11-05 12:02:53.994448assignment 9 end 2021-11-05 12:02:53.994448assignment 8 end 2021-11-05 12:02:53.994448assignment 7 end 2021-11-05 12:02:53.994448


assignment 6 end 2021-11-05 12:02:53.994448

assignment 10 start 2021-11-05 12:02:53.994448assignment 11 start 2021-11-05 12:02:53.994448

assignment 10 end 2021-11-05 12:02:55.996463
assignment 11 end 2021-11-05 12:02:55.996463


欢迎关注~ SandQuant 专注于全球金融数据和量化投资策略

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐