简单的python线程池实现线程安全demo
from concurrent.futures import ThreadPoolExecutor
import threading
import time
import sys
sys.path.append(sys.path)
test_list = [t for t in range(0,100)]
# 定义一个准备作为线程任务的函数
index = 0
lock = threading.Lock()
def action(thread_id):
global index
global test_list
global lock
while index<len(test_list):
print(f'{thread_id}执行了!')
try:
# time.sleep(random.random())
#time.sleep(random.randint(0, 3))
lock.acquire()
if index+1<len(test_list):
index += 1
callback(index)
else:
print(f'{thread_id}任务完成了!')
return
except BaseException as e:
print(e)
finally:
lock.release() def callback(index):
print(test_list[index]) def start(): # 创建一个包含4条线程的线程池
with ThreadPoolExecutor(max_workers=4) as pool:
# 使用线程执行map计算
# 后面元组有3个元素,因此程序启动3条线程来执行action函数
results = pool.map(action,(1,2,3,4))
print('--------------') if __name__ == '__main__':
pass
简单的python线程池实现线程安全demo的更多相关文章
- Python的并发并行[4] -> 并发[0] -> 利用线程池启动线程
利用线程池启动线程 submit与map启动线程 利用两种方式分别启动线程,同时利用with上下文管理来对线程池进行控制 from concurrent.futures import ThreadPo ...
- ReentrantLock+线程池+同步+线程锁
1.并发编程三要素? 1)原子性 原子性指的是一个或者多个操作,要么全部执行并且在执行的过程中不被其他操作打断,要么就全部都不执行. 2)可见性 可见性指多个线程操作一个共享变量时,其中一个线程对变量 ...
- Java多线程系列 JUC线程池02 线程池原理解析(一)
转载 http://www.cnblogs.com/skywang12345/p/3509960.html ; http://www.cnblogs.com/skywang12345/p/35099 ...
- Java多线程系列 JUC线程池01 线程池框架
转载 http://www.cnblogs.com/skywang12345/p/3509903.html 为什么引入Executor线程池框架 new Thread()的缺点 1. 每次new T ...
- 适配器、工厂模式、线程池、线程组、互斥锁、Timer类、Runtime类、单例设计模式(二十四)
1.多线程方法 * Thread 里面的俩个方法* 1.yield让出CPU,又称为礼让线程* 2.setPriority()设置线程的优先级 * 优先级最大是10,Thread.MAX_PRIORI ...
- java并发编程(十七)----(线程池)java线程池架构和原理
前面我们简单介绍了线程池的使用,但是对于其如何运行我们还不清楚,Executors为我们提供了简单的线程工厂类,但是我们知道ThreadPoolExecutor是线程池的具体实现类.我们先从他开始分析 ...
- java 线程池(线程的复用)
一. 线程池简介 1. 线程池的概念: 线程池就是首先创建一些线程,它们的集合称为线程池.使用线程池可以很好地提高性能,线程池在系统启动时即创建大量空闲的线程,程序将一个任务传给线程池,线程池就会启动 ...
- 由浅入深理解Java线程池及线程池的如何使用
前言 多线程的异步执行方式,虽然能够最大限度发挥多核计算机的计算能力,但是如果不加控制,反而会对系统造成负担.线程本身也要占用内存空间,大量的线程会占用内存资源并且可能会导致Out of Memory ...
- 基于线程池的线程管理(BlockingQueue生产者消费者方式)实例
1.线程池管理类: public class ThreadPoolManager { private static ThreadPoolManager instance = new ThreadPoo ...
- -1-5 java 多线程 概念 进程 线程区别联系 java创建线程方式 线程组 线程池概念 线程安全 同步 同步代码块 Lock锁 sleep()和wait()方法的区别 为什么wait(),notify(),notifyAll()等方法都定义在Object类中
本文关键词: java 多线程 概念 进程 线程区别联系 java创建线程方式 线程组 线程池概念 线程安全 同步 同步代码块 Lock锁 sleep()和wait()方法的区别 为什么wait( ...
随机推荐
- 力扣(leetcode)题库0001-python3
试一下leetcode的题库,不知道对于我这种小白要多长时,但是目标已经种下,去做就是了.You can do anything you set your mind to. 题目:题库链接 中:给定一 ...
- SpringCloud之配置中心(config)的使用
配置中心的作用就在于可以在项目启动时加载远程或本地的配置文件,将配置文件集中管理 springboot版本: 2.1.6.RELEASE springcloud版本: Finchley.RELEASE ...
- Mybatis-plus中sql语句各查询条件含义
lt:less than 小于le:less than or equal to 小于等于eq:equal to 等于ne:not equal to 不等于ge:greater than or equa ...
- ROS自动检测安装功能依赖包
cd ~/ros_ws/src sudo rosdepc init & rosdepc update cd .. rosdepc install -i --from-path src --ro ...
- php 常用助手函数
1 <?php 2 3 if (!function_exists('bcSum')) { 4 function bcSum($scale, ...$args): string 5 { 6 $re ...
- my.ini
[client] #客户端设置,即客户端默认的连接参数 # socket = /data/mysqldata/3306/mysql.sock #用于本地连接的socket套接字 # 默认连接端口 po ...
- JavaScript 时间的操作
1. 标准日期格式 转 时间戳 第一步,设置一个标准日期,获取这个日期格式的时间戳 let timeStr = "2020-08-10 12:34:45"; let newTime ...
- 环保行业ERP主要的几大治理区域?
环保行业是指在国民经济结构中,以防治环境污染.改善生态环境.保护自然资源为目的而进行的技术产品开发.商业流通.资源利用.信息服务.工程承包等活动的总称. 哲讯环保ERP行业产业链的上游主要是钢铁.有色 ...
- centos/rockylinux/proxmoxve重置root密码 以及 在#bash 下 重启
在 gurb 模式下,按[e]进入编辑页面 在 第3段 的末尾处添加以下代码,然后[Ctrl+X]即当前配置启动 init=/bin/bash 挂载,并使用命令重置密码 挂载 / mount -rw ...
- [部署日记]GO在Visual Studio Code初次运行时提示go: go.mod file not found in current directory or any parent directory; see 'go help modules'
我裂开,一波未平一波又起... 按照MS教程上填写 package main import "fmt" func main() { fmt.Println("Hello ...